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&lt;JObject&gt;().Where(x =&gt; x.ContainsKey("C") &amp;&amp; x.Property("D")?.Value?.ToString() == "ValD2").ToList()。请注意,如果D 不存在,则属性x.Property("D") 可以是null,因此也值得检查一下(例如,使用?. 运算符) 当然你是完全正确的@Volodymyr。谢谢你。 :)

以上是关于LINQ:获取包含具有特定名称和值的属性的数组中的对象的主要内容,如果未能解决你的问题,请参考以下文章

Linq 查询以返回具有特定属性值的嵌套数组

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?

列出具有特定属性和值的 subversion 存储库中的所有路径

PHP XML 到具有属性和值的数组/对象

在 Boto3 中获取具有特定标签和值的 EC2 实例列表

将分隔字段转换为具有名称和值的行