如何选择最新且不同的记录,然后使用LINQ计算不同的结果类型?

时间:2017-07-21 14:46:29

标签: vb.net linq

将问题跟进我原来的帖子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}

2 个答案:

答案 0 :(得分:1)

你可以使用Enumerable扩展方法, 对于你的第一个问题 你可以按id降序排序, 对于你的第二个问题 您可以获取列表,并使用其中status等于您想要的类型的扩展方法,然后使用count扩展方法,对于其他类型也是如此,这样您就可以计算两者。

如果您还不知道,我可以在这里查看我提到的方法。

Descending Order

where

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()}