用Distinct/GroupBy和排序从IEnumerable中选择——可能吗?
用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语句中完成。