サーチ…


LINQクエリをSQLクエリに変換する

IQueryableおよびIQueryable<T>インターフェイスを使用すると、開発者はLINQクエリ(「言語統合」クエリ)を特定のデータソース(リレーショナルデータベースなど)に変換できます。 C#で書かれたこのLINQクエリを取る:

var query = from book in books
            where book.Author == "Stephen King" 
            select book;

変数booksIQueryable<Book>を実装する型である場合、上記のクエリは、コードの構造を反映するデータ構造である式ツリーの形式でプロバイダ( IQueryable.Providerプロパティで設定)に渡されます。

プロバイダは、実行時に式ツリーを検査して以下を決定できます。

  • BookクラスのAuthorプロパティの述語があること。
  • 比較メソッドが 'equals'( == )であること。
  • それと同等の価値が"Stephen King"

この情報を使用すると、プロバイダは実行時にC#クエリをSQLクエリに変換し、そのクエリをリレーショナルデータベースに渡して、述語と一致する書籍のみを取得できます。

select *
from Books
where Author = 'Stephen King'

query変数が反復処理されると、プロバイダが呼び出されqueryIQueryableIEnumerable実装しIEnumerable )。

(この例で使用されるプロバイダは、クエリするテーブルを知り、C#クラスのプロパティをテーブルの列に一致させる方法を知るためにいくつかの追加のメタデータが必要ですが、そのようなメタデータはIQueryableインターフェイスの範囲外です)。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow