如何将LINQ与动态集合一起使用

59 c# linq

有没有办法将dynamic对象转换为IEnumerableType以使用属性过滤集合.

dynamic data = JsonConvert.DeserializeObject(response.Content);
Run Code Online (Sandbox Code Playgroud)

我需要访问这样的东西

var a = data.Where(p => p.verified == true)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jon*_*eet 107

只要dataIEnumerable某种类型,您可以使用:

var a = ((IEnumerable) data).Cast<dynamic>()
                            .Where(p => p.verified);
Run Code Online (Sandbox Code Playgroud)

Cast<dynamic>()是最终要与IEnumerable<dynamic>使得参数lambda表达式的类型也是dynamic.

  • @HosseinNarimaniRad:是的 - 即使它是一个值类型的序列,我的也会工作; 亚西尔不会.我添加了评论. (4认同)

Yas*_*adi 41

尝试投射到 IEnumerable<dynamic>

((IEnumerable<dynamic>)data).Where(d => d.Id == 1);
Run Code Online (Sandbox Code Playgroud)

这种方法比其他方法快4倍.

祝好运

  • 缺点是这不适用于`IEnumerable <T>`其中`T`是一个值类型,例如`List <int>`.有时这可能是相关的,有时则不会. (7认同)