LINQ Group和Count with Max

Mar*_*son 2 linq count max linq-group

有人可以写下以下的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 
Run Code Online (Sandbox Code Playgroud)

结果将是

Player         Count
Steve            1
John             2
Mark             1
Pete             1
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 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() };
Run Code Online (Sandbox Code Playgroud)

命名在这里非常重要 - 希望通过拼写出来我已经使它变得相当清楚.我当然还有其他方法可以做到,但这是我想到的最清楚的方法.