Bunu komut / sorgu ayırma kullanmak için uygun bir yer olarak kabul ediyorum . Örneğin:
// query
var validItems = items.Where(i => i.Field != null && i.State != ItemStates.Deleted);
// command
foreach (var item in validItems) {
// do stuff
}
Bu ayrıca, sorgu sonucuna iyi bir kendi kendine belgeleme adı vermenize olanak sağlar. Ayrıca, yeniden yapılanma fırsatlarını görmenize yardımcı olur, çünkü yalnızca verileri sorgulayan veya yalnızca mutasyona uğramış verileri kodlamayı yeniden düzenlemek, her ikisini de yapmaya çalışan karma koddan daha kolaydır.
Hata ayıklama yaparken foreach
, içeriğinin validItems
beklediğiniz çözüme göre çözülüp çözülmediğini hızlı bir şekilde kontrol etmek için daha önce kırabilirsiniz . Gerekmedikçe lambdaya girmek zorunda değilsin. Eğer lambdaya girmeniz gerekiyorsa, onu ayrı bir işleve ayırmanızı öneririm, o zaman bunun yerine ilerleyin.
Performansta bir fark var mı? Sorgu bir veritabanı tarafından destekleniyorsa, LINQ sürümünün daha hızlı çalıştırma potansiyeli vardır , çünkü SQL sorgusu daha verimli olabilir . Nesnelere LINQ ise, o zaman herhangi bir gerçek performans farkı görmezsiniz. Her zaman olduğu gibi, optimizasyonları önceden tahmin etmeyi denemek yerine kodunuzu belirleyin ve gerçekte bildirilen darboğazları düzeltin.