web-dev-qa-db-ja.com

.Net 4.0で利用できる、IQueryable <T>を実装するインスタンス化可能な型は何ですか?

.Net 4.0のC#のコンテキスト内で、IQueryable<T>を実装する組み込みオブジェクトはありますか?

40

IQueryableオブジェクトは、クエリ可能なプロバイダーによって生成されます(例:LINQ to SQL、LINQ to Entities/Entity Frameworkなど)。基本的な.NETでnewを使用してインスタンス化できるものはほとんどありませんフレームワークはIQueryableを実装します。

IQueryableは、クエリ可能なプロバイダーを作成するために使用するように設計されたインターフェイスです。これにより、解析可能な式ツリーを構築することにより、LINQライブラリを外部データストアに対して活用できます。本質的に、Queryableにはコンテキスト-正確に何をクエリしているかに関する情報が必要です。 newを使用してIQueryable型を作成することは、それが可能かどうかに関係なく、それほど遠くに行くことはできません。

つまり、IEnumerableは、AsQueryable()拡張メソッドを使用してIQueryableに変換できます。これは、表面的には似ていますが、機能的にveryプレーンなIEnumerableオブジェクトに対してLINQメソッドを使用する場合とは異なり、舞台裏で異なる構成を作成します。これはおそらく、実際のIQueryableプロバイダーを設定せずにアクセスできるクエリ可能なオブジェクトの最も豊富なソースです。この切り替えは、実際のデータストアを必要とせず、それを模倣できるメモリ内データのリストだけなので、LINQベースのアルゴリズムの単体テストに非常に役立ちます。

61
KeithS

さて、あなたの質問はちょっと変です...しかし、私は信じますReflector でインターフェースを見ると、それはロードされたアセンブリの実装者のリストを提供します。

免責事項として、私はリフレクターを有料で使用して以来使用していないので、私は間違っているかもしれません。

3
kprobst

EntityCollection と同様に EnumerableQuery も同様です。

これらのいずれかがあなたをどこかに連れて行くとは思いません。支援するには、私たちはあなたが本当に解決しようとしていることを知る必要があります。 LINQプロバイダーを作成している場合は、次をお読みください: http://msdn.Microsoft.com/en-us/library/bb546158.aspx

彼らはあなた自身の実装を書くことを勧めます。

3
Chris Shain