3

これがあります... MSDNページ、 IQueryable(Of T) Interface。IEnumerable を介してメソッドを追加しないマーカー インターフェイスが必要な理由を、より適切に説明できますか?

4

4 に答える 4

12

IQueryable<T>も伸びIQueryableます。基本的にIQueryableは、強く型付けされた方法で列挙できる です。(両方ともIQueryableすでにIEnumerable<T>拡張IEnumerableされているため、その前面には何も追加されていません。)

現在、厳密に型指定されているとIQueryable、LINQ to SQL (など) を厳密に型指定できます。そうしないとWhere、キャストせずに句などを記述できません。関連する実際の LINQ メソッドは型にあり、メソッドQueryableの大部分はミラーリングされていますが、デリゲートの代わりに式ツリーを使用しています。(以前に式ツリーを使用したことがない場合、それらは基本的にコードを記述するデータ構造です。一方、デリゲートはコード自体です。したがって、デリゲートを実行できますが、式ツリーを調べてそれが何をするかを確認できます。 )Enumerable

于 2009-06-25T15:57:11.773 に答える
5

IQueryable<T>これは、LINQ プロバイダーに必要なコントラクトを定義するために必要です。で使用できる拡張メソッドの多くは、IQueryable<T>デリゲートではなく式を受け入れるように設計されています。

LINQ プロバイダーはデリゲートを呼び出すのではなく式ツリーを分析する必要があるため、これは重要です。

于 2009-06-25T15:56:36.310 に答える
3

IEnumerableIQueryableおよびIEnumerable<T>. _ 独自のメソッドを持たない場合がありますが、これらの他の 3 つのインターフェイスを 1 つに集約するため、個別に処理する必要はありません。

于 2009-06-25T15:57:42.397 に答える
0

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

次に、ページを解析して結果を取得します。

于 2009-06-25T16:17:37.723 に答える