Linq-to-Objectでは、C#言語による処理であるLINQクエリを実行するためにメモリ内のデータを処理しています。LINQ-to-ObjectはLINQプロバイダですか?
なぜ私はプロバイダ(LINQ-to-Object)を使用するのか、メモリ内データをベースにしたLinqクエリを書くのですか?
Linq-to-Objectでは、C#言語による処理であるLINQクエリを実行するためにメモリ内のデータを処理しています。LINQ-to-ObjectはLINQプロバイダですか?
なぜ私はプロバイダ(LINQ-to-Object)を使用するのか、メモリ内データをベースにしたLinqクエリを書くのですか?
いいえ、Linqからオブジェクトは提供者ではなく、クエリを実行するための他の中間プロバイダ(linqからオブジェクト)をリレーする必要はありません。
より明確に理解するには、実際にプロバイダが何であるかを理解する必要があります。プロバイダは、基本的にIQueryProviderとIQueryableインターフェイスを実装する実装で、linqクエリは主にプロバイダが理解できるSOMETHINGに変換されます。たとえば、のLINQ to SQLをクエリに変換してSQLに変換すると、プロバイダ(この場合)のみがSQLを認識するため、その変換はSQLに変換されます。
In-Memoryコレクションのデータに対してクエリを実行すると、C#ではlinqクエリを他のクエリに変換する必要はありません。
@Stilgarとして「」と記載されているのは、ソースがIQueryableの場合です。 In-Memoryデータに対して作業する場合、ソースは基本的にIEnumerableです。
LINQ to ObjectsはLINQプロバイダーではありません。これは、IEnumerableでのLINQ APIの実装です。 LINQ APIは、メソッドの名前を適切に指定し、適切な引数を受け入れる限り、実質的にどの型でも実装できます。それは、オブジェクトにLINQに関連するLINQプロバイダに非常に近いものがあると言われています。プロバイダーは、ソースがIQueryableであり、コンパイラーが式ツリーを生成するときに使用されます。式ツリーをデリゲートにコンパイルすると、コンパイルメソッドはLINQプロバイダと非常によく似たものとして動作します。
"LINQ Provider"は、LINQ APIの単なる実装を示すためによく使われることに注意してください。小さな違いにもかかわらず、 "引数"と "パラメータ"が同じ意味でどのように使われているかと似ています。