如何在动态集合中使用LINQ

问题描述 投票:62回答:3

是否有一种方法可以将dynamic对象转换为IEnumerable类型以过滤具有属性的集合。

dynamic data = JsonConvert.DeserializeObject(response.Content);

我需要访问这样的内容

var a = data.Where(p => p.verified == true)

任何想法?

c# linq
3个回答
114
投票

只要data是某种类型的IEnumerable,就可以使用:

var a = ((IEnumerable) data).Cast<dynamic>()
                            .Where(p => p.verified);

Cast<dynamic>()IEnumerable<dynamic>结尾,因此lambda表达式的参数类型也为dynamic


42
投票

尝试投射到IEnumerable<dynamic>

((IEnumerable<dynamic>)data).Where(d => d.Id == 1);

此方法比其他方法快4倍。

祝你好运


0
投票

如果可以的话,理想的解决方案是在反序列化时指定类型,以免稍后进行转换。这比上面建议的方法干净得多。

所以,如果您有-

dynamic data = JsonConvert.DeserializeObject(response.Content);

然后只需将其更改为-

var data = JsonConvert.DeserializeObject<IEnumerable<dynamic>>(response.Content);
© www.soinside.com 2019 - 2024. All rights reserved.