2013-05-19 113 views
1

有人能写一个LINQ查询下面请LINQ集团与最大计数

由于数据低于我需要以下 每个星期的最高得分和它们的计数的球员,如果他们赢得更多比一个星期。如果在一周内得分为最高分,那么每个玩家的得分为1。该示例数据包括这种情况

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 

回答

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() }; 

的命名是很重要的位置 - 希望通过拼写出来的东西我做了它相当清楚。我相信当然还有其他的方式,但这是我想到的最清晰的方式。

+0

非常棒的就是这么做。这似乎是一个简单的问题,但细节非常棘手。感谢你的回答。 –