MyID
adında bir öznitelikte gruplanmış bir grup satır var. Şimdi her gruptan bir satırın StatusDate
özniteliğinin bu gruptaki en yüksek olduğu yeri istiyorum.LINQ: Satır
Bu benim ortaya koyduğum şey. biraz daha açıklama ile
rows.Select(x => x.Where(y => y.StatusDate == x.Max(z => z.StatusDate)).First())
:
rows.Select(x => // x is a group
x.Where(y => // get all rows in that group where...
// the status date is equal to the largest
// status date in the group
y.StatusDate == x.Max(z => z.StatusDate)
).First()) // and then get the first one of those rows
bunu yapmak için daha hızlı ya da daha deyimsel yolu var mı?
rows.Select(x => x.OrderByDescending(y => y.StatusDate).First());
... ve sorgu optimizasyoncusu her şeyi sıralamak için değil gerçekten ihtiyacı da artar bilir olmadığını kontrol edin:
Neden en büyük DateTime ile tüm satırları seçiyorsunuz, ama sadece ilkini seçiyorsunuz? Hangi "maksimize" satırını seçmezseniz, belki de x.Where (...) 'i (x.Max (...) ile First() değiştirmeniz gerekir. –
@ Vlad: Bunu bir cevap olarak ekle ve kabul edeceğim. Mantıklı gelir. –
'x.Max (...)' tüm satırı geri döndürmez - sadece maksimum değer. –