Ho un gruppo di righe raggruppate su un attributo chiamato MyID
. Ora voglio l'unica riga di ogni gruppo in cui l'attributo StatusDate
è il più alto in quel gruppo.LINQ: Ottenere la riga con il valore massimo di un determinato attributo
Questo è quello che mi è venuto in mente.
rows.Select(x => x.Where(y => y.StatusDate == x.Max(z => z.StatusDate)).First())
Con un po 'più spiegazione:
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
Esiste un modo più veloce o più idiomatico per fare questo?
Perché selezioni tutte le righe con il più grande DateTime, ma scegli solo il primo? Se non ti interessa quale riga "massimizzata" scegli, forse dovresti sostituire la x.Where (...). Prima() con x.Max (...). –
@Vlad: aggiungilo come risposta e lo accetterò. Ha perfettamente senso. –
'x.Max (...)' non restituirà l'intera riga, ma solo il valore massimo. –