以下代码有效:
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/