首页 > 解决方案 > 具有父字段值的 C# Linq 汇总子数组

问题描述

举个例子:

public class Team
{
    public int Id { get; set; }
    public string TeamName { get; set; }
    public Members[] Members { get; set; }
}

public class Members
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

如果我有一个包含以下内容的 C# 团队列表:

[
{
    "Id" : 1,
    "TeamName" : "A",
    "Members": [
        {
            "Id": 1,
            "FirstName": "Arthur",
            "LastName": "Nudge"
        },
        {
            "Id": 2,
            "FirstName": "Ken",
            "LastName": "Shabby"
        }
    ]
},
{
    "Id" : 2,
    "TeamName" : "B",
    "Members": [
        {
            "Id": 1,
            "FirstName": "Spiny",
            "LastName": "Norman"
        },
        {
            "Id": 2,
            "FirstName": "Raymond",
            "LastName": "Luxury-Yacht"
        }
    ]
}
]

我如何编写一个 Linq 查询来给出成员的结果以及团队 ID,例如

{
    "TeamId": 1,
    "Id": 1,
    "FirstName": "Arthur",
    "LastName": "Nudge"
},
{
    "TeamId": 1,
    "Id": 2,
    "FirstName": "Ken",
    "LastName": "Shabby"
},
{
    "TeamId": 2,
    "Id": 1,
    "FirstName": "Spiny",
    "LastName": "Norman"
}

我可以通过使用从团队列表中返回成员列表, Teams.SelectMany(t => t.Members).ToList();但我如何还包括 TeamId

标签: c#linq

解决方案


SelectMany以这种方式使用:

var q = Teams
    .SelectMany(t => t.Members
        .Select(tm => new{ TeamId = t.Id, tm.Id, tm.FirstName, tm.LastName }));

推荐阅读