LINQ to SQL クエリ
LINQ to SQL のクエリは、LINQ と同じ構文を使用して定義します。 異なる点は、クエリ内で参照されるオブジェクトがデータベース内の要素に割り当てられるという点だけです。 詳細については、「LINQ クエリの概要 (C#)」を参照してください。
LINQ to SQL は、作成したクエリを同等の SQL クエリに変換し、それをサーバーに送って処理します。 具体的には、アプリケーションは LINQ to SQL API を使用してクエリの実行を要求します。 次に、LINQ to SQL プロバイダーがクエリを SQL テキストに変換し、ADO プロバイダーに実行を委任します。 ADO プロバイダーは、クエリの結果を DataReader
として返します。 LINQ to SQL プロバイダーにより、ADO の結果がユーザー オブジェクトの IQueryable コレクションに変換されます。
Note
.NET Framework の組み込み型に対するほとんどのメソッドと演算子には、SQL に直接対応する変換が用意されています。 LINQ で変換できないものについては、ランタイム例外が発生します。 詳しくは、「SQL と CLR の型マッピング」をご覧ください。
次の表では、LINQ と LINQ to SQL のクエリ項目の類似点と相違点を示します。
アイテム | LINQ クエリ | LINQ to SQL クエリ |
---|---|---|
クエリを保持するローカル変数の戻り値の型 (シーケンスを返すクエリの場合) | ジェネリック IEnumerable |
ジェネリック IQueryable |
データ ソースの指定 | From 句 (Visual Basic) または from 句 (C#) を使用します。 |
同 |
フィルター処理 | Where /where 句を使用します |
同 |
グループ化 | Group…By /groupby 句を使用します |
同 |
選択 (投影) | Select /select 句を使用します |
同 |
遅延実行と即時実行 | 「LINQ クエリの概要 (C#)」をご覧ください | 同 |
結合の実装 | Join /join 句を使用します |
Join /join 句を使用できますが、AssociationAttribute 属性を使用する方が効果的です。 詳しくは、「リレーションシップを介したクエリの実行」をご覧ください。 |
リモート実行とローカル実行 | 詳しくは、「リモート実行とローカル実行」をご覧ください。 | |
ストリーミングとキャッシュ クエリ | ローカル メモリ シナリオでは適用なし |