我有以下动态对象作为动态类型的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的对象
答案 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在评论中所建议的那样)。