You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# LINQ实现按国家分组并拼接球队与球员列表

C# LINQ实现按国家分组并拼接球队与球员列表

嘿,我来帮你搞定这个需求!我们可以通过两次嵌套分组来实现目标:先按国家把所有数据归类,每个国家内部再按球队分组,最后把每个球队的球员编号拼接成括号里的列表,再用 - 连接同一国家的不同球队信息。

第一步:定义数据模型

首先我们需要一个类来对应原始表格里的每一行数据:

public class PlayerInfo
{
    public string Country { get; set; }
    public string Team { get; set; }
    public string Player { get; set; } // 如果你的球员编号是整数类型,改成int也可以,后续拼接逻辑微调即可
}

第二步:准备示例数据

模拟你提供的表格数据:

var playerList = new List<PlayerInfo>
{
    new PlayerInfo { Country = "England", Team = "MU", Player = "1" },
    new PlayerInfo { Country = "England", Team = "MU", Player = "2" },
    new PlayerInfo { Country = "England", Team = "MU", Player = "3" },
    new PlayerInfo { Country = "England", Team = "LIV", Player = "4" },
    new PlayerInfo { Country = "England", Team = "LIV", Player = "5" },
    new PlayerInfo { Country = "Spain", Team = "RM", Player = "6" },
    new PlayerInfo { Country = "Spain", Team = "RM", Player = "7" },
    new PlayerInfo { Country = "Spain", Team = "BAR", Player = "8" },
    new PlayerInfo { Country = "Spain", Team = "BAR", Player = "9" },
    new PlayerInfo { Country = "Spain", Team = "BAR", Player = "10" }
};

第三步:编写LINQ查询实现分组与拼接

核心逻辑就是先按国家分组,每个组内再按球队分组,最后完成字符串拼接:

var result = playerList
    .GroupBy(p => p.Country) // 第一级:按国家分组
    .Select(countryGroup => new 
    {
        Country = countryGroup.Key,
        TeamPlayerInfo = string.Join(" - ", // 同一国家的不同球队用"-"连接
            countryGroup.GroupBy(p => p.Team) // 第二级:每个国家内按球队分组
              .Select(teamGroup => $"{teamGroup.Key}({string.Join(",", teamGroup.Select(p => p.Player))})") // 拼接球队名与球员列表
        )
    })
    .ToList();

第四步:查看最终结果

把结果整理成表格的话,就完全符合你想要的输出:

CountryTeam & Player
EnglandMU(1,2,3) - LIV(4,5)
SpainRM(6,7) - BAR(8,9,10)

整个逻辑很直观:先把数据按国家归类,再在每个国家里聚合同球队的球员,最后把格式拼接好,完美匹配需求!

备注:内容来源于stack exchange,提问作者Hussein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:43:18