c# - LINQ to Entities 无法识别方法 'Newtonsoft.Json.Linq.JToken get_Item(System.String)' 方法,

标签 c# arrays json entity-framework linq

以下代码有效:

string data = Encoding.UTF8.GetString(eventData.GetBytes());
JObject o = JObject.Parse(data);

var disp = db.Dispositivos
    .Where(p => p.ClaveDispositivo == "UM5WOkRIFtS9dWbM5f1YM/ncpdrpSYrh3zND9Y/YHM4=");

if(disp.ToList().Count > 0)
{
    // ...

然而,当我尝试使用变量而不是硬编码值时:

string data = Encoding.UTF8.GetString(eventData.GetBytes());
JObject o = JObject.Parse(data);

var disp = db.Dispositivos
    .Where(p => p.ClaveDispositivo == o["deviceKey"].ToString());

if(disp.ToList().Count > 0)
{
    // ...

我收到这个错误:

LINQ to Entities does not recognize the method 'Newtonsoft.Json.Linq.JToken get_Item(System.String)' method.

最佳答案

该消息是不言自明的。传递给 Where 调用的表达式随后由 EF 转换为 SQL。 EF 不知道如何转换 JToken 上的属性索引器,因此它失败了。

您可以通过获取表达式外部的值来解决此问题。在您的 lambda 中引用它会在创建的表达式中产生一个“常量”。

var deviceKey = o["deviceKey"].ToString();

var disp = db.Dispositivos
    .Where(p => p.ClaveDispositivo == deviceKey);

顺便说一句,如果仅此而已,您最好调用 disp.Any()(或将 Where 替换为 Any)你想检查。调用 ToList 将导致所有数据被检索和具体化,只是为了忽略它。

关于c# - LINQ to Entities 无法识别方法 'Newtonsoft.Json.Linq.JToken get_Item(System.String)' 方法,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39149262/

相关文章:

c# - 编号枚举与未编号枚举

c# - 为默认构造函数添加断点

c - 在 C 中定义数组

java - 在 Java 数组中设置 boolean 值

javascript - js : please explain this variable value with 5 double quotations

c# - .NET:为什么嵌套类具有在外部类中声明的泛型?

c# - ComboBox 数据源和 Entity Framework

c - 动态数组分配困惑

javascript - getElementById().appendChild() 拒绝工作!

ios - 使用 RestKit 为我的对象获取 JSON 字符串