2

誰かが次のLINQクエリを書いてくれませんか

以下のデータを考えると、毎週最高のスコアを持つ次のプレイヤーと、1 週間以上勝った場合の数が必要です。1 週間のトップ スコアが引き分けの場合、各プレイヤーは 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
4

1 に答える 1

5

私はおそらくこれを 2 つのステップに分けます。これは実際には何かが以前に実行されることを意味するわけではありませんが、理解するのは簡単です。

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

ここでは名前付けが非常に重要です。うまくいけば、説明することでかなり明確になります。もちろん他の方法もあると思いますが、これが私が考えた中で最も明確な方法です。

于 2013-05-19T19:47:35.543 に答える