# LINQ クエリを SQL クエリに変換する
IQueryable
そして IQueryable<T>
インターフェイスを使用すると、開発者は LINQ クエリ (「言語統合」クエリ) をリレーショナル データベースなどの特定のデータソースに変換できます。 C# で記述された次の LINQ クエリを見てみましょう:
var query = from book in books
where book.Author == "Stephen King"
select book;
変数 books
の場合 IQueryable<Book>
を実装するタイプです 次に、上記のクエリがプロバイダーに渡されます (IQueryable.Provider
で設定) プロパティ) コードの構造を反映するデータ構造である式ツリーの形式で。
プロバイダーは、実行時に式ツリーを調べて、以下を判断できます。
Author
の述語があることBook
のプロパティ クラス;- 使用される比較方法が「equals」であること (
==
); - 等しいはずの値が
"Stephen King"
であること .
この情報を使用して、プロバイダーは実行時に C# クエリを SQL クエリに変換し、そのクエリをリレーショナル データベースに渡して、述語に一致する書籍のみを取得できます。
select *
from Books
where Author = 'Stephen King'
プロバイダは query
のときに呼び出されます 変数が繰り返されます (IQueryable
IEnumerable
を実装 ).
(この例で使用されているプロバイダーは、照会するテーブルを認識し、C# クラスのプロパティをテーブルの列に一致させる方法を知るために、追加のメタデータを必要としますが、そのようなメタデータは IQueryable
インターフェイス)