【问题标题】:LINQ: Get an object in array containing property with specific name and valueLINQ:获取包含具有特定名称和值的属性的数组中的对象
【发布时间】: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。 :(

标签: c# linq .net-core


【解决方案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。谢谢你。 :)
猜你喜欢
  • 1970-01-01
  • 2018-07-20
  • 2023-02-26
  • 2010-09-22
  • 2020-10-25
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
相关资源
最近更新 更多