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'

望ましい結果の例ID2ごとに最大の値である行にのみ関心があります。ID1

   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

1 に答える 1

12

簡単な方法:

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

これがどれほど効率的な SQL に変換されるかは完全にはわかりません。それが重要な場合は、お気に入りのプロファイラーで確認してください。

于 2013-02-07T19:56:56.063 に答える