c# 动态访问 child 作为 IEnumerable

标签 c# linq dynamic

我有以下动态对象作为动态类型的 IEnumerable

[{
    "id": 1,
    "subList": [
      {"specialId": 42}, 
      {"specialId": 27}
    ]
}, 
 {
    "id": 2,
    "subList": [
      {"specialId": 13}, 
      {"specialId": 14}
    ]
}]

我可以将对象放入 Dynamics 的 IEnumerable 中,并可以像下面这样运行 linq 查询

listOfDynamics.Where(x => x.id == 2);

但是我想做的是匹配子列表

listOfDynamics.Where(x => ((IEnumerable)x.subList)).Where(y => y.specialId == 42));

所以在上面的例子中,它会返回 id 为 1 而不是 id 为 2 的对象

最佳答案

在你的Where你想检查 subList包含带有 specialId == 42 的任何元素:

listOfDynamics.Where(x => ((IEnumerable<dynamic>)x.subList).Any(y => y.specialId == 42));

所以 Any() 是您想要的方法。

你需要投 x.subListIEnumerable<dynamic>而不仅仅是 IEnumerable (正如@Ivan-Stoev 和@Derked 在评论中所建议的那样)。

关于c# 动态访问 child 作为 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37291808/

相关文章:

android - 有没有办法动态设置 setContentView(int id)?

c# - 从 C# Windows 窗体启动系统屏幕保护程序

c# - 如何展平数组数组?

c# - Entity Framework 在不同的工作站上生成不同的查询

c# - 如何在Unity C#脚本中使用System.Xml.Linq?

c# - 在 C# 中向变量名添加一个数字

c# - 将字典中的值分配给动态对象 C#

c# - 返回引用与不返回任何内容之间的区别

c# - 从 JSON 数组反序列化和解析只需要的数组

c# - 作为服务的 Mono 编译器可以在调试上下文中使用吗?