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是灾难性的对象,但你可以使用MaxBy从MoreLINQ在这种情况下:)
(对于以前的版本道歉 - 我还没有完全理解分组位.)
| 归档时间: |
|
| 查看次数: |
8548 次 |
| 最近记录: |