<T>を返しますか?アプリケーションをできるだけ柔軟にしたいのですが、私のインターフェースをあまりにも具体的にすることで自分自身を穴に掘り下げることはできません。答えこれは、エンティティに対して今後実行されるクエリを実行するかどうか、およびそれらがメモリ内にあるかどうかによって異なります。今後のクエリが必要な場合、DBはIQueryableを返します。将来のクエリがあり、それがメモリ内で実行される場合、IEnumerableを返します。それ以上のクエリがなく、すべてのデータを読み込む必要がある場合は、IList、ICollectionなどを返します。源このような質問はパフォーマンスチューニングに関係します。この場合、パフォーマンスは、すべての考慮されたオプション(および最もパフォーマンスが良いもの)またはアーキテクチャ上の考慮事項を考慮して測定する必要があります。使用すると、クエリをデータベースで実行させることができます。ドキュメントには、この区別をしないようにクエリプロバイダを実装することが示されています。コレクション型を使用すると、間違って未評価のクエリではなく、実体化された結果が返されるようになるため、データベースをクエリするとIEnumerableを使用しない方がよいです。makerofthings7:厳密に階層化されたアーキテクチャでは、DAL以外の場所でDBバッククエリーを発行することはできません。メモリ内のクエリを実行してデータ構造をどこにでも変換することができます。すべてのコレクションをメモリ内で照会できるため、それを防ぐことはできません。返されるべきではないと思います。理由をカバーしています。lifetimeがリクエストであることを確認します。この方法では、遅延実行の利点を得ることができますが、データベースの非効率的なクエリのリスクにさらされます。次に、アプリケーションのパフォーマンスをテストして(またはトラフィックを獲得する可能性が最も高い部分を少なくとも)確認し、データアクセスのパターンを確認します。DALに特殊なメソッドを作成して、完全にマテリアライズされたオブジェクトを取得し、これらのクエリを事前にコンパイルされたクエリとして作成します。true).ToList();WFGroupはBaseEntityから派生したクラスですが、私は通常遅延読み込みとプロキシを使用して、オブジェクトをコンテキストにデタッチ/アタッチしません。私は、マテリアライズド・クエリを必要とするキャッシング・サービスを使用しています。私が見つけることができる最も良い共通の分母です。興味深いことに、1対1のテーブルからエンティティへのマッピングではどのように動作するのかわかりますが、1:多くの関係のようにもっと複雑なものをどのように扱うのか不思議です。源ありがとう、私は行くべき方向のように見える。ついてしか読んでいませんが、使い方はわかりません。ようなものかもしれません。源IEnumerableは、IQueryableがIEnumerableであることを保証しません。私のケースではTはEntityですが、リポジトリに実装されたIDataContextインターフェイスがあり、すべてのメソッドはTが基本エンティティに制約されている汎用Tです。私はサンプルインターフェイスで答えを更新しました.1:nはエンティティモデルで処理されます。これは、変更されたt4を使用してEF4に実装するのは少し難しかったが、EF4.2を使用していた。私はこの答えは時代遅れで間違ったアドバイスだと思う。回避する必要があります。最近の記事を参考にして、私が何を意味するのかを説明する回答を投稿しました。配列を返すだけです(クエリ結果が誤って変更されないようにしたい場合)。"stream"クエリを実行すると、古いメソッドを呼び出して新しいメソッドを呼び出すことができ、古いクライアントとの互換性を保つために結果を具体化できます。millimoose源ここに非常に良い記事がありますこれを、つまり「IQueryableを返すリポジトリ」という見出しの下に示します。difference?この結果、私はチーム内で次のコーディング規約を追加しました。オブジェクトを返すことはありません。いう理由は、呼び出し元がこれを基に構築し、最終的にデータベース上で実行されるSQLクエリを変更することを可能にします。これは潜在的にDB性能に関して危険ですが、それはSoCに関するものです。呼び出し元はデータソースを気にしません。それは単にデータが必要です。