C# 使用带有动态列表的Linq.Dynamic where方法会产生错误
我正在阅读一些JSON并将其转换为动态列表。 下面是我的代码:C# 使用带有动态列表的Linq.Dynamic where方法会产生错误,c#,linq,dynamic,dynamic-linq,C#,Linq,Dynamic,Dynamic Linq,我正在阅读一些JSON并将其转换为动态列表。 下面是我的代码: dynamic data = JObject.Parse(response); var result = data.result; var result = ((IEnumerable)arr).Cast<dynamic>().ToList(); var id = result[0].id; var filtereddata = result.Where("id==1"); 给出错误类型“Object中不存在属性或字
dynamic data = JObject.Parse(response);
var result = data.result;
var result = ((IEnumerable)arr).Cast<dynamic>().ToList();
var id = result[0].id;
var filtereddata = result.Where("id==1");
给出错误类型“Object
中不存在属性或字段“id”,而var id=result[0]。id代码>似乎正在工作
我正在解析的JSON是:
{
"count": 1,
"result": [
{
"id": 11,
"name": "Locations",
}]
}
如果需要更多信息,请告诉我。谢谢你宝贵的时间
编辑:
甚至尝试了var filtereddata=result.Where(c=>c.id==1.Select(“id”)代码>使用lambda表达式,但仍然存在相同的问题。动态LINQ不适用于动态
类型。LINQ to Objects可以工作,但由于您以string
的形式接收筛选器,因此它不适用
解决方法是在应用动态Where
之前使用临时匿名投影,然后选择返回原始对象:
var filtereddata = result
.Select(x => new { item = x, id = (int)x.id, name = (string)x.name })
.Where("id==1")
.Select(x => x.item);
动态LINQ不适用于Dynamic
类型。LINQ to Objects可以工作,但由于您以string
的形式接收筛选器,因此它不适用
解决方法是在应用动态Where
之前使用临时匿名投影,然后选择返回原始对象:
var filtereddata = result
.Select(x => new { item = x, id = (int)x.id, name = (string)x.name })
.Where("id==1")
.Select(x => x.item);
我认为动态LINQ不适用于动态
类型。为什么是动态的?为什么不是poco?我不能使用poco,exacts字段可能会有所不同。所以必须使用动态。如果有其他的解决方案,那么动态Linq我也可以检查,那么常规Linq呢?e、 g.Where(x=>x.id==1)
。实际上,我将Where条件作为字符串“id==1”。这就是为什么我使用动态LINQ的原因。我不认为动态LINQ与Dynamic
类型一起工作。为什么是动态的?为什么不是poco?我不能使用poco,exacts字段可能会有所不同。所以必须使用动态。如果有其他的解决方案,那么动态Linq我也可以检查,那么常规Linq呢?e、 g.Where(x=>x.id==1)
。实际上,我将Where条件作为字符串“id==1”。这就是为什么我使用动态LinqIf匿名投影到一个定义良好的项目是可行的,那么为什么首先创建IEnumerable
,可以直接创建模式post Jsonread@MrinalKamboj我不知道OP为什么选择解析成JObject
,它在内部创建dynamic
JArray
/JObject
/JProperty
。答案只是涵盖了具体的用例。如果匿名投影到一个定义良好的场景是可行的,那么为什么首先要创建IEnumerable
,可以直接创建模式post Jsonread@MrinalKamboj我不知道OP为什么选择解析成JObject
,它在内部创建dynamic
JArray
/JObject
/JProperty
。答案只是涵盖了具体的用例。