yapar. ASP.NET MVC 4 ve Entity Framework 6 (Kod) kullanıyorum İlk) ve istemiyorum bazı garip davranışlar:
Bir IsDeleted
boolean özelliğine sahip bir Images
varlık sınıfım var ve şimdi ilk 25 görüntüyü siliyorum, silinmemiş, aşağıdakileri kullandım kod: Bu gibi.Where (i =>! I.IsDeleted) SQL'e çevirmez ama .Where (i => i.IsDeleted.Equals (false)),
IEnumerable<Image> items = db.Images.Where(i => !i.IsDeleted).Take(25);
ben biraz daha derin araştırılması çok yavaş ve Where(i => !i.IsDeleted)
zaten DB sorgusu tetikler ve tüm görüntüleri yüklenir (ve => yavaş çözümlenir) ve çek ardından" olur ki, öğrendim kod". Daha sonra gayet iyi çalışan Where(i => i.IsDeleted.Equals(false))
'u denedim.
İlk sözdizimini daha çok beğendiğim için neden böyle bir sorunu veya bu sorunu nasıl önleyebilirim?
Bu bir hata uf EF 6 beta mıdır, yoksa EF sürümlerinde mi gerçekleşiyor?
GÜNCELLEME:
sorun IEnumerable<Image>
için dökme (ben değil benim kodunda aynı çizgide Where
yaptı ama basitlik için burada değişti), ama kullanarak .OrderBy(...).ThenBy(...)
yapmak da bu kullanıyorum Func<T, TKey>
-tuşlarına ve bu IOrderedEnumerable
değil IOrderedQueryable
dönmek yok ...
GÜNCELLEME 2: Expression<Func<T, TKey>>
tuşlarını kullanarak çözüldü ...
Hrm. Bu meraklı. Peki ya Nerede (i => i.IsDeleted == false)? – Tim
@Tim: "! I.IsDeleted" ile aynı, ama IEnumerable 've 'Where' (" Eşittir "inline inline" değil, "!' "Için örtülü kalmam olabilir. sonraki satırda ") - araştırıyorum ... –
ChrFin
@chrfin OK, işte sebep bu. IEnumerable item = db.Images; '' IQueryable' işlevini kullanarak, çift satırlarda sorgu oluşturmak ve gerçekten istediğiniz kadar çalıştırılamamak için veritabanından belleğe tüm öğeleri alırsınız. –
MarcinJuraszek