2013-05-19 47 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

非常棒的就是這麼做。這似乎是一個簡單的問題,但細節非常棘手。感謝你的回答。 –