У меня есть группа строк, сгруппированных по атрибуту MyID
. Теперь мне нужна одна строка из каждой группы, где атрибут StatusDate
является самым высоким в этой группе.LINQ: Получение строки с максимальным значением заданного атрибута
Это то, что я придумал.
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
Есть ли быстрее или более идиоматических способ сделать это?
Почему вы выбираете все строки с самым большим DateTime, но только выбираете первый? Если вам не важно, какая «максимизированная» строка вы выберете, возможно, вы должны заменить x.Where (...). Сначала() с помощью x.Max (...). –
@ Vlad: Добавьте это как ответ, и я приму это. Делает совершенный смысл. –
'x.Max (...)' не вернет всю строку, хотя - только максимальное значение. –