IQueryable インターフェイス

# 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 インターフェイス)