私は Lambda でますます多くの演習を行ってい.AsQueryable();
ますが、IQueryable を使用する例を使用する理由と.AsQueryable();
、IEnumerable を省略して使用する理由がわかりません。
私はMSDNを読みましたが、「式ツリーを実行する」ことがどのように利点があるかわかりません。
誰でも私に説明できますか?
IQueryableはIEnumerableを実装しているため、IQueryableを使用すると、IEnumerableで実行できるすべてのことをすぐに実行できます。IQueryablesは、ラムダ式を基になるデータソースのクエリに変換する処理を行います。これはSQLデータベースまたはオブジェクトセットである可能性があります。
基本的に、それがIQueryableまたはIEnumerableである場合は、通常、どちらの方法でも気にする必要はありません。
ユーザーとしては、一般的に気にする必要はありません。それは実際にはデータ ソースの実装者に関するものです。データ プロバイダーが IEnumerable を実装するだけの場合、基本的に LINQ to objects の実行を行っていることになります。つまり、コレクションに対するメモリ内操作です。IQueryable は、Linq2Sql、Linq2Xml、および Linq2Entities が行うことと同じように、式が (通常は列挙によって) 実行されると、式ツリーを実行用の代替表現に変換する機能をデータ ソースに提供します。
IQueryable は Expression を公開するため、エンド ユーザーが気にかけているのを見ることができるのは、実行される Expression ツリーを検査したい場合だけです。もう 1 つの用途は、プロバイダーの検査です。ただし、これらのシナリオは両方とも、実際には他のクエリ プロバイダーの実装者のために予約されており、式を変換する必要があります。Linq のポイントは、使用する式の実行の実装を気にする必要がないことです。
Arne Claassenに同意します。データソースによって提供される、基礎となる実装について考える必要がある場合があります。たとえば、IEnumerableとIQueryableによって生成されたSQLが特定のシナリオでどのように異なるかを示すこのブログ投稿を確認してください。