5

私は ASP.NET MVC 4 と Entity Framework 6 (Code First) を使用していますが、望ましくない/好きではない奇妙な動作があります:ブール型のプロパティを持つ
エンティティ クラスがあり、最初の 25 枚の画像を取得したいと考えています。これらは削除されないため、次のコードを使用しました。ImagesIsDeleted

IEnumerable<Image> items = db.Images.Where(i => !i.IsDeleted).Take(25);

これは非常に遅かったので、もう少し詳しく調査したところ、Where(i => !i.IsDeleted)すでにDBクエリがトリガーされ、すべての画像がロードされ(そして解析=>遅く)、チェックが「コード内」で行われることがわかりました。次に、Where(i => i.IsDeleted.Equals(false))どれがうまく機能するかを試してみましたが、SQL経由でチェックが行われました。

最初の構文の方がはるかに好きなので、なぜそうなのか、またはこの問題を回避するにはどうすればよいですか?
これはおそらくEF 6ベータ版のバグですか、それともすべてのEFバージョンで発生しますか?

更新:
問題はキャストですIEnumerable<Image>Whereコードの同じ行ではありませんでしたが、簡単にするためにここで変更しました)が、これを使用して -keys を.OrderBy(...).ThenBy(...)使用していますが、Func<T, TKey>返さIOrderedEnumerableれませんIOrderedQueryable...

更新 2:キー を使用して解決Expression<Func<T, TKey>>...

4

1 に答える 1