我有2个列表,一个用于玩家,另一个用于教练。
为了统计属于教练的玩家数量,我使用了:
var g = AllePlayer.GroupBy(play=> play.coachNumer);
foreach (var grp in g)
{
foreach (Coach co in AlleCoaches)
{
if (co.coachNumer== grp.Key)
{
co.NumOfPlayer= grp.Count();
}
}
}
现在我想知道是否有一种很好的方法可以将带有“foreach”的情人部分放在一个漂亮的Linq语法中,以避免这种“foreach”循环。 提前谢谢!
答案 0 :(得分:2)
您可以稍微改变一下这句话。由于最终您想要更改每个教练的属性,因此最简单的方法是遍历该列表,如:
foreach (Coach co in AlleCoaches)
{
co.NumOfPlayer= AllePlayer.Where(p => p.coachNumber == co.coachNumber)
.Count();
}
答案 1 :(得分:1)
这将是一种更简单的方法:
var query = AllePlayer.GroupBy(player => player.coachNumer,
(coach, players => new {
Coach = coach,
Count = players.Count() }));
这将为您提供一个序列,其中每个元素都是教练,以及该教练的球员数量。
然后你可以遍历结果,并将值分配给Coach.NumOfPlayer
,但你真的需要吗?如果你这样做,就会这样做:
foreach (var pair in query)
{
pair.Coach.NumOfPlayer = pair.Count;
}
就个人而言,并不觉得“玩家数量”应该是Coach
类型的一部分,而不是......
答案 2 :(得分:1)
AlleCoaches.ToList()
.ForEach(n=>n.NumOfPlayer=AllePlayer.Where(n=>coachNumer==n.coachNumer).Count());
答案 3 :(得分:0)
var g = AllePlayer.TakeWhile(play=> ( play.coachNumer!=null));
你可以采用你需要的任何逻辑,但语法也是一样的。
var count = g.Count();