首页 > 解决方案 > 从嵌套数组中查找父 ID

问题描述

我有以下 JSON。我想查询以查找其部门获得learnerId: "123". 我在 stackoverflow C# Linq 中提出了类似的查询,在嵌套数组对象中查找特定项目并得到了回复,但需要找到根 id。

这是我的查询,它只获取sectorid,但我需要获取雇主 ID(即根 ID。)预期输出是“id”:“1000000000000”

var sectorId = employers
                .SelectMany(e => e.Sectors)
                .SingleOrDefault(sector => 
                    sector.Learners.Any(learner => learner.LearnerId == learnerEntity.Id)
                   )?.Id;

我的 JSON 是:

[
  {
    "name": "Emp1",
    "edsNumber": "",
    "sectors": [
      {
        "id": "7d65fa4c-86ed-4e07-9e9a-a1583df5715c",
        "name": "Technology1",
        "learners": [
          {
            "learnerId": "123",
            "learnerName": "Learner1",
            "dateAdded": 1612872051
          },
          {
            "learnerId": "456",
            "learnerName": "Learner2",
            "dateAdded": 1612877369
          },
          {
            "learnerId": "789",
            "learnerName": "Learner3",
            "dateAdded": 1612877372
          },
          {
            "learnerId": "12314",
            "learnerName": "Learner4",
            "dateAdded": 1613065233
          },
          {
            "learnerId": "2346",
            "learnerName": "Learner5",
            "dateAdded": 1613577350
          }
        ],
        "course": {
          "name": "Angularv10",
          "isCompleted": true
        },
        "contact": {
          "name": "Voytek",
          "jobTitle": "Designer1",
          "email": "rana@gmail.com",
          "isCompleted": true
        }
      }
    ],
    "id": "1000000000000"
  },
  {
    "name": "Emp2",
    "edsNumber": "",
    "sectors": [
      {
        "id": "7d65fa4c-86ed-4e07-9e9a-a1583df5235c",
        "name": "Technology1",
        "learners": [
          {
            "learnerId": "834457",
            "learnerName": "Learner6",
            "dateAdded": 1612872051
          },
          {
            "learnerId": "11122",
            "learnerName": "Learner7",
            "dateAdded": 1612877369
          }
        ],
        "course": {
          "name": "Angularv10",
          "isCompleted": true
        },
        "contact": {
          "name": "Voytek",
          "jobTitle": "Designer1",
          "email": "rana@gmail.com",
          "isCompleted": true
        }
      }
    ],
    "id": "2000000000000"
  }
]

标签: c#linq

解决方案


您可以使用嵌套Any语句执行此操作:

var employer = employers
    .SingleOrDefault(e => e.Sectors
        .Any(s => s.Learners
            .Any(l => l.LearnerId == 123)));

// Check for null just in case we didn't find a match
if(employer != null)
{
    var employerId = employer.Id;
}

请注意,如果多个雇主匹配,这将引发异常。


推荐阅读