用Distinct/GroupBy和排序从IEnumerable中选择——可能吗?

9 浏览
0 Comments

用Distinct/GroupBy和排序从IEnumerable中选择——可能吗?

假设你有以下代码:

class LogEntry
{
    int ID;
    int UserName;
    datetime TimeStamp;
    string Details;
}

并且你已经提取了一组数据,如下所示:

ID  Username   Timestamp   Details
1   foo        1/01/2010   创建账户
2   zip        2/02/2010   创建账户
3   bar        2/02/2010   创建账户
4   sandwich   3/03/2010   创建账户
5   bar        5/05/2010   偷食物
6   foo        5/05/2010   找不到食物
7   sandwich   8/08/2010   捐赠食物
8   sandwich   9/09/2010   吃更多食物
9   foo        9/09/2010   吃食物
10  bar        11/11/2010  找不到食物

我想做的是仅选择每个用户的最后一条记录(即按时间戳降序排序)。我可以理解Distinct和GroupBy,但是将它们结合在一个单一的语句中,并且还返回非重复/分组字段/属性并按时间戳排序给我带来了困扰。

以上例子应该输出:

ID  Username   Timestamp   Details
2   zip        2/02/2010   创建账户
8   sandwich   9/09/2010   吃更多食物
9   foo        9/09/2010   吃食物
10  bar        11/11/2010  找不到食物

我不想“欺骗”并采用冗长的方法来解决,因为我相信可以在一条LINQ语句中完成。

0