LINQ

2011-09-14 4 views
0

を使用して、最高の出演者を選ぶ方法var battingContribution = IQueryable<Player, Runs>(基本的には選手とその合計バッティングスコアのリスト)と別のセットvar bowlingContribution = IQueryable<Player, Runs>が与えられている場合、バッティングスコアからボウリングスコアを差し引いたものが最も高い正味の合計をもたらすか?LINQ

+0

2つの型パラメータを受け入れる 'IQueryable'はありません。あなたは本当に何を使っていますか? –

+0

@DanielHilgarth:おそらく 'IDictionary'です。 – Jon

+0

これは実際には匿名のタイプです。私はちょうどそこにいくつかの擬似コードを投げ、私の意見を理解しました。おそらく私のコードを最適化しているところには至っていません。ただ結果を得ようとしています。 –

答えて

1

両方貢献しているだけPlayersについて次の作品(私は2つのタイプのparamsでのIQueryableを知りませんが):LINQのサンプルへ

var BestPlayer = (from a in (from bt in battingContribution from bw in BowlingContribution where bt.Player == bw.Player select new { Player = bt.Player, Diff = bt.Runs - bw.Runs)) orderby a.Diff descending select a).First().Player; 

MSDNの参照はhttp://msdn.microsoft.com/en-us/vcsharp/aa336746

EDITを参照してください -

var BestPlayer = (from a in (from bt in batRuns from bw in bowlRuns where bt.Player == bw.Player select new { Player = bt.Player, Diff = bt.Runs - bw.Runs}) orderby a.Diff descending select a).First(); 
+0

あなたが提供したものを軽く編集してください: 'var BestPlayer =(from from(btからのbtからのBtRunsのbwからのbt.Player == bw.Playerを選択してください){Player = bt.Player、Diff = bt。 Runs-bw.Runs})orderby a.Diff降順選択a).First(); ' しかし、それは間違いなく機能します! –

2

あなたはを持っていると仮定すると:OPから完全にコメントあたりとして代わりに、(2型パラメータを持っていません)IQueryableの:あなたが好む場合

// Just to make sure that we don't get exceptions if a player is only in one 
// of the two collections -- you might want to handle this case differently 
var players = battingContribution.Keys.Intersect(bowlingContribution.Keys); 

// Put each player and their performance into what is essentialy a tuple 
var performance = players.Select(p => 
    new { 
     Player = p, 
     Performance = battingContribution[p] - bowlingContribution[p] 
    }); 

// Sorting 
var orderedPerformance = performance.OrderByDescending(item => item.Performance); 

// Selecting best performer 
var bestPerformer = orderedPerformance.First().Player; 

あなたは簡潔さのために一緒にこれらをチェーンすることができます。