使用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();
第四步:查看最终结果
把结果整理成表格的话,就完全符合你想要的输出:
| Country | Team & Player |
|---|---|
| England | MU(1,2,3) - LIV(4,5) |
| Spain | RM(6,7) - BAR(8,9,10) |
整个逻辑很直观:先把数据按国家归类,再在每个国家里聚合同球队的球员,最后把格式拼接好,完美匹配需求!
备注:内容来源于stack exchange,提问作者Hussein
相关产品推荐
相关产品推荐

