c#动态访问子节点为IEnumerable

时间:2016-05-18 06:27:09

标签: c# linq dynamic

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

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

我可以将对象放入动态的IEnumerable中,并可以运行linq查询,如下所示

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

但是,我想做的是能够在subList上匹配

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

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

1 个答案:

答案 0 :(得分:4)

Where中,您要检查subList是否包含specialId == 42的任何元素:

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

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

您需要将x.subList转换为IEnumerable<dynamic>而不是IEnumerable(正如@ Ivan-Stoev和@Derked在评论中所建议的那样)。