2016-08-09 11 views
0

Linq-to-Objectでは、C#言語による処理であるLINQクエリを実行するためにメモリ内のデータを処理しています。LINQ-to-ObjectはLINQプロバイダですか?

なぜ私はプロバイダ(LINQ-to-Object)を使用するのか、メモリ内データをベースにしたLinqクエリを書くのですか?

答えて

2

いいえ、Linqからオブジェクトは提供者ではなく、クエリを実行するための他の中間プロバイダ(linqからオブジェクト)をリレーする必要はありません。

より明確に理解するには、実際にプロバイダが何であるかを理解する必要があります。プロバイダは、基本的にIQueryProviderIQueryableインターフェイスを実装する実装で、linqクエリは主にプロバイダが理解できるSOMETHINGに変換されます。たとえば、のLINQ to SQLをクエリに変換してSQLに変換すると、プロバイダ(この場合)のみがSQLを認識するため、その変換はSQLに変換されます。

In-Memoryコレクションのデータに対してクエリを実行すると、C#ではlinqクエリを他のクエリに変換する必要はありません。

@Stilgarとして「」と記載されているのは、ソースがIQueryableの場合です。 In-Memoryデータに対して作業する場合、ソースは基本的にIEnumerableです。

2

LINQ to ObjectsはLINQプロバイダーではありません。これは、IEnumerableでのLINQ APIの実装です。 LINQ APIは、メソッドの名前を適切に指定し、適切な引数を受け入れる限り、実質的にどの型でも実装できます。それは、オブジェクトにLINQに関連するLINQプロバイダに非常に近いものがあると言われています。プロバイダーは、ソースがIQueryableであり、コンパイラーが式ツリーを生成するときに使用されます。式ツリーをデリゲートにコンパイルすると、コンパイルメソッドはLINQプロバイダと非常によく似たものとして動作します。

"LINQ Provider"は、LINQ APIの単なる実装を示すためによく使われることに注意してください。小さな違いにもかかわらず、 "引数"と "パラメータ"が同じ意味でどのように使われているかと似ています。

関連する問題