2013-02-07 11 views
5

LINQを使用してクエリを実行するSQL Serverに格納されたテーブルがあります。テーブルの漠然とした説明:各キーの最大値を持つ行を検索

ID1 | ID2 | SomeData 
----------------------------- 
    1 | 1 | 'Moo' 
    1 | 2 | 'Meow' 
    1 | 3 | 'Woof' 
    1 | 4 | 'Cheap' 
    2 | 1 | 'Quack' 
    2 | 2 | 'Grrrrr' 
    2 | 3 | 'Wan wan' 

私はID2ID1例あたりの最大値が結果希望する行にしか興味午前:

1 | 4 | 'Cheap' 
    2 | 3 | 'Wan wan' 

を私は、このSQLコードが出ています

SELECT * 
FROM SomeTable a 
INNER JOIN 
(
    SELECT ID1, MAX(ID2) as SomeName 
    FROM SomeTable 
    GROUP BY ID1 
) as b 
ON a.ID1 = b.ID1 and a.ID2 = b.SomeName 

LINQで実装する場合、サブクエリも必要ですか?つまり、データベースにクエリを実行し、変数を '内部クエリ'の結果でロードし、同じテーブルをクエリしますが、 '内部クエリ'の値と比較しますか?私はこれをしばらくのぞかせば、結局それを手に入れることができますが、おそらくLINQでこれをやり遂げるための素晴らしい方法があるような気がします。

希望の答えは、拡張メソッドの構文を利用します。

ボーナス:標準のLINQシンタックスに拡張メソッド構文コンバータがありますか?どのツールを使用してLINQステートメントを実行していますか? LINQクエリを使用してC#(ASP.NET MVC)を再生する必要があるのは少し面倒です。

+4

LinqPadはLINQ文で遊ぶのに最適です! http://www.linqpad.net/(一般的にC#コードでも遊んでいます) – driis

+2

[** LINQPad **](http://www.linqpad.net/)のコピーを入手してください。 – mellamokb

答えて

11

まっすぐ進む方法:これはに変換するので、それが重要な場合は、お好みのプロファイラでそれを確認する方法、効率的なSQL

var result = db.SomeTable.GroupBy(x => x.ID).Select(g => g.OrderByDescending(x => x.ID2).First()); 

全くわかりません!

+0

それは素晴らしいです!降順で注文し、最高の結果を得ます。しかし、私はまだ他の回答を見ることに興味があります – Jeff