0

Linq-to-Object では、C# 言語で処理される LINQ クエリを実行するためにインメモリ データを操作するという混乱があります。

インメモリ データに基づいて実行される Linq クエリを作成するときに、プロバイダー (LINQ-to-Object) を使用するのはなぜですか?

4

2 に答える 2

2

いいえ、Linq to Objectはプロバイダーではなく、クエリを実行するために他の中間プロバイダーを中継する必要はありません (linq to object)。

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

データのインメモリ コレクションに対してクエリを実行する場合、C# は linq クエリを他のクエリに変換する必要はありません。

@Stilgar が言及しているように、「ソースが IQueryable の場合にプロバイダーが使用されます」。インメモリ データを処理する場合、ソースは基本的に IEnumerable です。

于 2016-08-09T11:52:03.417 に答える
2

LINQ to Objects は LINQ プロバイダーではありません。これは、IEnumerable での LINQ API の実装です。LINQ API は、メソッドに適切な名前を付け、適切な引数を受け入れる限り、事実上すべての型に実装できます。そうは言っても、LINQ to Objects に関連する LINQ プロバイダーに非常に近いものがあります。プロバイダーは、ソースが IQueryable で、コンパイラが式ツリーを生成する場合に使用されます。式ツリーはデリゲートにコンパイルできるため、Compile メソッドは LINQ プロバイダーと非常によく似た機能を果たします。

また、実際には、「LINQ プロバイダー」は、単に LINQ API の実装を示すためによく使用されることに注意してください。わずかな違いにもかかわらず、「引数」と「パラメーター」が同じ意味で使用される方法に似ています。

于 2016-08-09T10:37:06.677 に答える