繁体   English   中英

如何过滤扁平的 LINQ 结果为 C#

[英]How to filter a flattened LINQ result in C#

我有一个 JSON 响应,其中包含几个作业的列表,每个作业都可以有标签,标签由键/值对组成,其中值是值列表。 我正在尝试在 C# 中形成一个 LINQ 查询,该查询返回一个作业 ID 列表,其中每个作业都有一个带有键 =“区域”的标签,值包含“测试”。

我已经成功地将 JSON 反序列化为类,但我是 LINQ 的新手,并且已经花费了大量时间来试验和谷歌搜索可能的解决方案,但无济于事。

样本数据:

    {
    jobs: [
        {
            id: 1
            tags: [
                {
                    key: "Area"
                    values: [ "TEST", "SHIP" ]
                }
        }
        {
            id: 2
            tags: [
                {
                    key: "Area"
                    values: [ "BUILD" ]
                }
        }
        {
            id: 3
            tags: [
                {
                    key: "Area"
                    values: [ "INSPECT", "TEST", "SHIP" ]
                }
                {
                    key: "Status"
                    values: [ "HOLD", "SPECIAL" ]
                }
        }
        {
            id: 4
            tags: [
                {
                    key: "Area"
                    values: [ "BUILD", "TEST" ]
                }
        }]
    }

Class 结构:

    public class Tag
        {
        public string key { get; set; }
        public List<string> values { get; set; }
        }

    public class Job
        {
        public int id { get; set; }
        public List<Tag> tags { get; set; }
        }

所以我想要的是一个Job.id列表,其中job.tags包含一个Tag ,其中Tag.values包含“TEST”。 在这个样本中,

1
3
4

任何 LINQ 专家都知道如何解决这个问题?

var result = jobs.Where(j =>    j.tags != null 
                             && j.tags.Any(t =>   t.key.Equals("Area") 
                                               && t.values.Contains("TEST")))
                 .Select( x => x.id)
                 .ToList();

result将是包含 1,3,4 的int List

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM