问题描述
我目前正在开发 .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];