LINQ:获取具有给定属性的最大值的行

Den*_*gan 6 c# linq asp.net linq-to-sql

我在一个名为的属性上分组了一堆行MyID.现在我希望每个组中的一行StatusDate属性在该组中最高.

这就是我想出来的.

rows.Select(x => x.Where(y => y.StatusDate == x.Max(z => z.StatusDate)).First())
Run Code Online (Sandbox Code Playgroud)

有一点解释:

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
Run Code Online (Sandbox Code Playgroud)

有没有更快或更惯用的方式来做到这一点?

Jon*_*eet 15

一种替代方案是使用:

rows.Select(x => x.OrderByDescending(y => y.StatusDate).First());
Run Code Online (Sandbox Code Playgroud)

......并检查查询优化器知道它并不真正需要排序的一切.(这将在LINQ是灾难性的对象,但你可以使用MaxByMoreLINQ在这种情况下:)

(对于以前的版本道歉 - 我还没有完全理解分组位.)