1. ホーム
  2. c#

[解決済み】LinqでIQueryableを使用する。

2022-04-02 22:02:11

質問

はどのように使うのですか? IQueryable LINQの文脈では?

拡張メソッドの開発などにも使われるのでしょうか?

どのように解決するのですか?

マーク・グラベルの回答 は非常に完成度が高いのですが、ユーザーの視点からも何か補足しておこうと思いまして...。


ユーザーの立場からすると、大きな違いは IQueryable<T> (正しくサポートしているプロバイダーで)多くのリソースを節約することができます。

たとえば、リモートのデータベースに対して作業を行う場合、多くの ORM システムでは、テーブルからデータを取得する際に 2 種類の方法があります。 IEnumerable<T> を返すものと 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つのレコードしか返さないかもしれません...。