如何解决LINQ 将列总和添加到列表条目
我目前正在开发 .net 5.0 应用程序。
- 给定的是
List<Player>
- 我需要转换
List<Player>
,但保留所有条目 - 将每支球队的总得分添加到“意甲”中的所有球员
不幸的是,我不知道如何使用 C# LINQ 扩展方法语法正确计算联赛中所有球员的每支球队的总得分。
- 播放器类:
public class Player
{
public string Name { get; set; }
public string Team { get; set; }
public int score { get; set; }
public string League { get; set; }
public int TotalTeamscore { get; set; }
}
- 程序类
public class Program
{
public static void Main()
{
// given is a List<Player> - I need to calculate the Totalscore for each team ONLY for Leage "SerieA"
var players = new List<Player> {
new Player { Name = "Alex",Team = "A",score = 10,League = "SerieA",TotalTeamscore = 0 },new Player { Name = "Anna",score = 20,new Player { Name = "Berta",Team = "B",score = 60,new Player { Name = "Benny",score = 40,new Player { Name = "Charlie",Team = "C",League = "PremierLeague",new Player { Name = "Connor",};
// I need to find a proper way to calculate the TotalTeamscore for each Team in league SerieA and add this score to the players...
var teamTotalscores = players
.Where(p => p.League == "SerieA")
.GroupBy(p => p.Team)
.Select(p => new Player {
TotalTeamscore = p.Sum(s => s.score)
// score = x.Key ??
})
.ToList();
// desired result: same List<Player> - only the Total Teamscore of a Team in "SerieA" should be calculated for each team and added to each player in a team:
// new Player { Name = "Alex",TotalTeamscore = 30 },// new Player { Name = "Anna",// new Player { Name = "Luke",TotalTeamscore = 100 },// new Player { Name = "Lucy",// new Player { Name = "Charlie",// new Player { Name = "Connor",}
你知道如何解决这个问题吗?
您是否知道如何使用 C# LINQ 扩展方法语法正确计算联赛中所有球员的每支球队的 Totalscore。
解决方法
LINQ 专为查询而设计,而您需要修改集合中的对象。
虽然您可以使用 Enumerable.Select
执行此操作,但标准的 foreach
循环会更合适:
var serieAPlayers = players.Where(p => p.League == "SerieA");
var teamScores = serieAPlayers
.GroupBy(p => p.Team)
.ToDictionary(grp => grp.Key,grp => grp.Sum(p => p.Score));
foreach (var player in serieAPlayers) player.TotalTeamScore = teamScores[player.Team];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。