将问题跟进我原来的帖子How can I select the most recent and distinct records using LINQ?
示例数据
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
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 1
Final Results
Type 1 Type 2
1 3
如何按最近的状态对状态类型进行分组和统计?我编写的代码只会给我计数,而不是最近的状态。
Dim StatusCount= From item In db.RecordHistory
Group By Key = item.Status Into Xs = Group
Select New With {.Status = Key, .Count = Xs.Count}
答案 0 :(得分:1)
你可以使用Enumerable扩展方法, 对于你的第一个问题 你可以按id降序排序, 对于你的第二个问题 您可以获取列表,并使用其中status等于您想要的类型的扩展方法,然后使用count扩展方法,对于其他类型也是如此,这样您就可以计算两者。
如果您还不知道,我可以在这里查看我提到的方法。
答案 1 :(得分:1)
根据前一个问题,我们能够获得所需的输出,如
Dim LatestStatusTable = (From RecordHistoryTable In db.RecordHistory) _
.GroupBy(Function(i) i.ID) _
.[Select](Function(g) g.OrderByDescending(Function(x) x.Timestamp).First())
从那里你只需要在先前返回的结果中按Status
分组
Dim StatusCount = From item In LatestStatusTable
Group By Key = item.Status Into Xs = Group
Select New With {.Status = Xs.Key, .Count = Xs.Count()}