IEnumerableがストアドプロシージャを模倣したり、データベースを制限するのに使用されていると書かれている記事を読んだ。外部プロバイダでの遅延読み込み機能が失われました。リポジトリパターンでのIQueryableとIEnumerableの遅延ロード
開発者に柔軟性を与えるためにIQueryableとして使用します。レイジーローディングがあります。
パフォーマンスの面では、両方ともかなりの量のパフォーマンスを消費します。どちらの方がより好ましいですか?
IEnumerableがストアドプロシージャを模倣したり、データベースを制限するのに使用されていると書かれている記事を読んだ。外部プロバイダでの遅延読み込み機能が失われました。リポジトリパターンでのIQueryableとIEnumerableの遅延ロード
開発者に柔軟性を与えるためにIQueryableとして使用します。レイジーローディングがあります。
パフォーマンスの面では、両方ともかなりの量のパフォーマンスを消費します。どちらの方がより好ましいですか?
リポジトリパターンの観点から、あなたはそれをこのように考えることができます:あなたが一度にクライアントに全体のリストを渡したいとき
は熱心なロードIEnumerable
を使用してください。彼らはまだlinq節を追加することができますが、クライアントは遅延実行の恩恵を受けません。
遅延照会機能をクライアントに拡張したい場合は、クライアントが独自のlinq句を追加できるようにするために、遅延ロードを使用します(IQueryable
)。これにより、出力が必要になるまでクエリ全体の実行が延期されます。
「IEnumerableを」と「のIQueryable」との間の主な違いは、フィルタロジックが実行される場合についてである
Deferred execution and eager evaluation
参照。 1つはクライアント側(メモリ内)で実行され、もう1つはデータベース上で実行されます。
List、Arrayなどのメモリ内のコレクションからデータをクエリするときは、IEnumerableを使用する必要があります。
一方、アウトメモリ(リモートデータベース、サービスなど)のコレクションからデータをクエリする場合は、IQueryableを使用する必要があります。
いつも...それはあなたが必要とするものによって決まります... –