Mam kilka wierszy zgrupowanych w atrybucie o nazwie MyID
. Teraz chcę jeden wiersz z każdej grupy, w której atrybut StatusDate
jest najwyższy w tej jednej grupie.LINQ: Uzyskiwanie wiersza z maksymalną wartością określonego atrybutu
Oto, co wymyśliłem.
rows.Select(x => x.Where(y => y.StatusDate == x.Max(z => z.StatusDate)).First())
Z nieco więcej wyjaśnień:
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
Czy istnieje szybciej lub bardziej idiomatycznych sposób to zrobić?
Dlaczego wybierasz wszystkie wiersze z największą datą czasową, ale wybierasz tylko pierwsze? Jeśli nie zależy ci na wyborze "zmaksymalizowanego" rzędu, być może powinieneś zastąpić x.Where (...). First() z x.Max (...). –
@ Vlad: Dodaj to jako odpowiedź, a ja to zaakceptuję. Ma doskonały sens. –
'x.Max (...)' nie zwróci całego wiersza - tylko wartość maksymalna. –