LINQ:获取包含具有特定名称和值的属性的数组中的对象
Posted
技术标签:
【中文标题】LINQ:获取包含具有特定名称和值的属性的数组中的对象【英文标题】:LINQ: Get an object in array containing property with specific name and value 【发布时间】:2021-12-16 02:49:38 【问题描述】:尝试通过使用具有特定值的属性之一作为“指针”来选择数组中的对象。我的目标是用 linq 做到这一点
例子:
"A": "ValA",
"B": "ValB",
"C": [
"D": "ValD1",
"E": "ValE1",
"F": "ValF1"
,
"D": "ValD2",
"E": "ValE2",
"F": "ValF2"
,
"D": "ValD2",
"E": "ValE3",
"F": "ValF3"
]
所以我想要做的是获取对象 n 数组“C”,其中包含属性“D”和值“ValD2”。由于有两个对象,我想让 LINQ 查询返回一个包含两个对象的列表。如果有一个对象包含属性“D”和值“ValD2”。可以这么说,我只会取回一个包含这些参数的对象。
即:
[
"D": "ValD2",
"E": "ValE2",
"F": "ValF2"
,
"D": "ValD2",
"E": "ValE3",
"F": "ValF3"
]
到目前为止,我已经通过这样做获得了数组 C 中的所有对象:
json.DescendantsAndSelf().OfType<JObject>().Where(x => x.ContainsKey("C")).ToList()
【问题讨论】:
您可以在 JSON 数据周围使用类包装器并反序列化结果,还是必须操作纯 JSON? @Volodymyr 遗憾的是,我必须操作普通的 json。 :( 【参考方案1】:所以我想我是在 Abdus Salam Azad 和 Prasad Telkikar 的帮助下找到的:
json.DescendantsAndSelf().OfType<JObject>().Where(x => x.ContainsKey("D")).Where(x => x.Property("D").Value.ToString() == "ValD2").ToList()
谢谢大家!
【讨论】:
只是一个小评论:您可能会将您的Where(...)
调用链接到一个:json.DescendantsAndSelf().OfType<JObject>().Where(x => x.ContainsKey("C") && x.Property("D")?.Value?.ToString() == "ValD2").ToList()
。请注意,如果D
不存在,则属性x.Property("D")
可以是null
,因此也值得检查一下(例如,使用?.
运算符)
当然你是完全正确的@Volodymyr。谢谢你。 :)以上是关于LINQ:获取包含具有特定名称和值的属性的数组中的对象的主要内容,如果未能解决你的问题,请参考以下文章
如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?