2012-01-20 12 views
11

IEnumerableがストアドプロシージャを模倣したり、データベースを制限するのに使用されていると書かれている記事を読んだ。外部プロバイダでの遅延読み込み機能が失われました。リポジトリパターンでのIQueryableとIEnumerableの遅延ロード

開発者に柔軟性を与えるためにIQueryableとして使用します。レイジーローディングがあります。

パフォーマンスの面では、両方ともかなりの量のパフォーマンスを消費します。どちらの方がより好ましいですか?

+1

いつも...それはあなたが必要とするものによって決まります... –

答えて

21

リポジトリパターンの観点から、あなたはそれをこのように考えることができます:あなたが一度にクライアントに全体のリストを渡したいとき

  1. は熱心なロードIEnumerableを使用してください。彼らはまだlinq節を追加することができますが、クライアントは遅延実行の恩恵を受けません。

  2. 遅延照会機能をクライアントに拡張したい場合は、クライアントが独自のlinq句を追加できるようにするために、遅延ロードを使用します(IQueryable)。これにより、出力が必要になるまでクエリ全体の実行が延期されます。

「IEnumerableを」と「のIQueryable」との間の主な違いは、フィルタロジックが実行される場合についてである
Deferred execution and eager evaluation

0

参照。 1つはクライアント側(メモリ内)で実行され、もう1つはデータベース上で実行されます。

List、Arrayなどのメモリ内のコレクションからデータをクエリするときは、IEnumerableを使用する必要があります。

一方、アウトメモリ(リモートデータベース、サービスなど)のコレクションからデータをクエリする場合は、IQueryableを使用する必要があります。

0

IEnumerable vs IQueryable

IEnumerableをクライアント側で使用する配列/リストのための最善であるのに対してのIQueryableは、サーバー側のデータに最適です。