Linq で IQueryable を使用する 質問する

Linq で IQueryable を使用する 質問する

IQueryableLINQ のコンテキストでは は何に使用されますか?

拡張メソッドの開発やその他の目的に使用されますか?

ベストアンサー1

マーク・グラヴェルの回答非常に完成度が高いのですが、ユーザーの視点からもこれについて何か付け加えておきたいと思います...


ユーザーの観点から見た主な違いは、IQueryable<T>(適切にサポートするプロバイダーと)使用すると、多くのリソースを節約できることです。

たとえば、多くの ORM システムでリモート データベースに対して作業している場合、テーブルからデータを取得する方法は 2 つあります。1 つは を返しIEnumerable<T>、もう 1 つは を返しますIQueryable<T>。たとえば、Products テーブルがあり、コストが 25 ドルを超えるすべての製品を取得するとします。

もし、するなら:

 IEnumerable<Product> products = myORM.GetProducts();
 var productsOver25 = products.Where(p => p.Cost >= 25.00);

ここで何が起きるかというと、データベースがすべての製品を読み込み、それを回線経由でプログラムに渡します。その後、プログラムがデータをフィルタリングします。本質的には、データベースが を実行しSELECT * FROM Products、すべての製品を返します。

IQueryable<T>一方、適切なプロバイダーを利用すれば、次のことが可能になります。

 IQueryable<Product> products = myORM.GetQueryableProducts();
 var productsOver25 = products.Where(p => p.Cost >= 25.00);

コードは同じに見えますが、ここでの違いは、実行される SQL が になることですSELECT * FROM Products WHERE Cost >= 25

開発者の観点から見ると、これは同じように見えます。ただし、パフォーマンスの観点からは、ネットワーク全体で 20,000 件ではなく 2 件のレコードしか返されない可能性があります。

おすすめ記事