2

IQueryableインターフェイスが実際に何を表しているのか、ちょっと混乱しています。

のMSDNドキュメントには、「特定のデータソースに対してクエリIQueryableを評価する機能が提供されています」と記載されています。

のドキュメントには、「 IQueryableオブジェクトによって記述されるIQueryProviderクエリを作成および実行するためのメソッドを定義する」と書かれています。

名前とドキュメントの概要は、クエリ可能なオブジェクト/データストアであることを示しています。2番目の引用と、ObjectQueryEntity Frameworkのクラスが実装しているという事実IQueryableは、実行可能なクエリであることを示しています。

私は何かを誤解しましたか、それとも本当にちょっと曖昧ですか?

4

3 に答える 3

2

AnIQueryableはクエリ自体を表します。それに関連付けられたデータ ソースがありますが、データ ストア自体ではありません。特に、通常、すべてのデータがメモリにあるわけではありません。

これはオブジェクトのようなものと考えることができます。SqlCommandオブジェクトにはクエリがあり、データを要求する内容はわかっていますが、データ自体は含まれていません。

于 2009-12-27T19:33:07.360 に答える
1

AnIQueryableは、クエリを実行できるソースを表します。これは、SQL サーバー上のテーブルの表現、またはオブジェクトのメモリ内コレクションである可能性があります。

AnIQueryProviderは、式ツリーで表されるクエリを作成および実行できるオブジェクトを表します。たとえば、LINQ-to-SQL クエリ プロバイダーは式ツリーIQueryableを取得し、列挙する (結果を取得する) か、列挙する前に (クエリを作成して) さらに絞り込むことができる を返します。

MSDNには、独自IQueryProvider. このチュートリアルを実行すると、理解が深まると思います。

于 2009-12-27T19:39:10.230 に答える
1

IQueryable は、2 つの (おそらく非常に異なる) ものを表します。これは、コードを記述する式ツリーへの参照の形式でクエリを表し、クエリの実行方法を知っている「プロバイダー」への参照の形式でデータ ソースを表します。

あなたの混乱の原因は、ドキュメントが IQueryable が実際に定義するメソッドについてしか話せないという事実にあると思います。IQueryable の機能のほとんどは、Queryable クラスで定義された関連付けられた拡張メソッドの実装に由来しますが、それらは厳密には IQueryable インターフェイスの一部ではありません。

面白い!

更新:質問を読み直すと、別の有用な洞察は、クエリ自体がクエリ可能であるということです。これは、LINQ で構成性を有効にするための鍵です。したがって、IQueryable はクエリであり、クエリ可能です。したがって、型名に矛盾はありません。

于 2009-12-27T19:44:23.417 に答える