有人可以为以下内容编写LINQ查询
鉴于以下数据,我需要以下内容 每周得分最高的玩家,如果他们赢得超过一周,他们的数量。如果在一周内得分达到最高分,那么每个玩家得到一个计数。示例数据包括这种情况
Week Player Points
1 Steve 35
1 Mark 29
1 John 26
2 John 23
2 Mark 21
2 Steve 21
3 Mark 42
3 John 42
3 Steve 19
4 Pete 28
4 John 16
4 Steve 14
4 Mark 12
结果将是
Player Count
Steve 1
John 2
Mark 1
Pete 1
答案 0 :(得分:5)
我可能会把它分成两个步骤 - 这实际上并不意味着任何事情都会被更早地执行,但它更容易理解。
// For each week, yield a sequence of winning results
var winningResultsByWeek = from result in results
group result by result.Week into week
let winningScore = week.Max(x => x.Points)
select week.Where(x => x.Points == winningScore)
var winsPerPlayer = from winningResults in winningResultsByWeek
from winningResult in winningResults
group winningResult by winningResult.Player into winsByPlayer
select new { Player = winsByPlayer.Key,
Count = winsByPlayer.Count() };
命名在这里非常重要 - 希望通过拼写出来我已经明白了。我确信当然还有其他方法可以做到,但这是我想到的最清楚的方法。