たとえば、私が持っているとします(疑似コード):
public IEnumerable<User> GetUsers(string name)
データ アクセス レイヤーで Entity Framework に接続します。現時点では、.ToList()
返す前に実行するため、ビジネス ロジック レイヤーがデータ アクセス レイヤーに干渉しないようにします。
ただし、ビジネスロジックレイヤーでは、これに少し異なるバリエーションが必要です。たとえば、必要なデータが少なくなります(たとえば、ユーザーIDまたはさらにフィルタリングするためなど)。
効率的な DB レイヤーを作成するには、データのサブセットを返す別のメソッド (オーバーロードされたメソッドなど) が必要です。
ただし、ToList() を「チート」して省略することもできます。ビジネス ロジック レイヤーは最後に AsQueryable() を追加します。したがって、私のビジネス ロジック レイヤーは、作成された基になる SQL を操作できます。
ビジネス ロジック層の AsQueryable() に対する人々の考えは? これは私のデータ アクセス レイヤーに対する漏れやすい抽象化のように思えますが、信じられないほど便利である可能性があります。おそらく、(EF 名前空間ではなく) LINQ 名前空間にあるため、使用するのはそれほど悪いことではありませんか?
編集
注意すべき有用な点 (および ToList() の省略に対する議論) は、それを呼び出すコードが以前にデータバインディングのために ToList() に依存していた場合、つまりエラー「ストアクエリに直接データバインディング (DbSet、DbQuery、 DbSqlQuery) はサポートされていません。」実行時エラーだけで、コンパイル時エラーは発生しません。したがって、ToList() が確実に UI 層の前に呼び出されるようにする必要があります。