如何使用LINQ选择最新且不同的记录?

时间:2017-07-20 21:27:15

标签: vb.net linq

我正在尝试使用LINQ获取状态历史记录的最新状态。我的订单有问题,或者我完全不合适。

我的代码

Dim LatestStatusTable= (From RecordHistoryTable In db.RecordHistory) _
    .GroupBy(Function(i) i.Status).[Select](Function(i) i.First())

示例数据

Data

ID    Timestamp                 Status
251   2017-07-19 11:01:15.577   2
250   2017-07-14 16:15:38.543   2
249   2017-07-13 13:31:13.010   2
249   2017-07-14 04:16:08.307   1
249   2017-07-14 05:45:38.437   2
249   2017-07-14 08:00:42.253   1
249   2017-07-14 08:30:02.380   2
248   2017-07-11 15:30:28.223   2
248   2017-07-11 18:31:11.857   1
248   2017-07-11 18:49:08.510   2

Desired Output

ID    Timestamp                 Status
251   2017-07-19 11:01:15.577   2
250   2017-07-14 16:15:38.543   2
249   2017-07-14 08:30:02.380   2
248   2017-07-11 18:49:08.510   2

有人可以教育我并指出正确的方向吗?

1 个答案:

答案 0 :(得分:2)

GroupBy ID然后在选择时,您希望在OrderByDescendingTimestamp,然后在每个组中First

Dim LatestStatusTable = (From RecordHistoryTable In db.RecordHistory) _
    .GroupBy(Function(i) i.ID) _
    .[Select](Function(g) g.OrderByDescending(Function(x) x.Timestamp).First())