これがあります... MSDNページ、 IQueryable(Of T) Interface。IEnumerable を介してメソッドを追加しないマーカー インターフェイスが必要な理由を、より適切に説明できますか?
4 に答える
IQueryable<T>
も伸びIQueryable
ます。基本的にIQueryable
は、強く型付けされた方法で列挙できる です。(両方ともIQueryable
すでにIEnumerable<T>
拡張IEnumerable
されているため、その前面には何も追加されていません。)
現在、厳密に型指定されているとIQueryable
、LINQ to SQL (など) を厳密に型指定できます。そうしないとWhere
、キャストせずに句などを記述できません。関連する実際の LINQ メソッドは型にあり、メソッドQueryable
の大部分はミラーリングされていますが、デリゲートの代わりに式ツリーを使用しています。(以前に式ツリーを使用したことがない場合、それらは基本的にコードを記述するデータ構造です。一方、デリゲートはコード自体です。したがって、デリゲートを実行できますが、式ツリーを調べてそれが何をするかを確認できます。 )Enumerable
IQueryable<T>
これは、LINQ プロバイダーに必要なコントラクトを定義するために必要です。で使用できる拡張メソッドの多くは、IQueryable<T>
デリゲートではなく式を受け入れるように設計されています。
LINQ プロバイダーはデリゲートを呼び出すのではなく式ツリーを分析する必要があるため、これは重要です。
IEnumerable
、IQueryable
およびIEnumerable<T>
. _ 独自のメソッドを持たない場合がありますが、これらの他の 3 つのインターフェイスを 1 つに集約するため、個別に処理する必要はありません。
linqクエリを式ツリー(System.Linq)に変換する場合は、IQueryableを使用します。式ツリーから、LINQクエリを別の言語に簡単に翻訳できます(SQL for Linq ToSQL。もう1つの典型的な例は、このクエリが必要なLinqtoGoogleです。
var searchResult = from result
in Google.Repository
where result.Equals("i love linq")
select result;
このURLに翻訳するには:
http://www.google.com/search?hl=en&q=i+love+linq&aq=f&oq3%aqi=g10
次に、ページを解析して結果を取得します。