gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:21:35 26 4
gpt4 key购买 nike

以下代码有效:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com