使用Linq.Dynamic,其中带有动态列表的方法会出错

时间:2016-10-05 09:32:39

标签: 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");

该行

var filtereddata = result.Where("id==1");

No property or field 'id' exists in type 'Object似乎有效时,会出现错误var id = result[0].id;

我正在解析的JSON是:

{
"count": 1,
"result": [
{
  "id": 11,
  "name": "Locations",

}]
}

如果需要更多信息,请与我们联系。谢谢你宝贵的时间。

修改 甚至尝试var filtereddata = result.Where(c=>c.id==1).Select("id");使用lambda表达式,但仍然是同样的问题。

1 个答案:

答案 0 :(得分:2)

动态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);