Linq:如何分组,最大和顺序

时间:2015-02-16 10:22:14

标签: c# sql .net linq

我有下表:

id   serialcode    timestamp
1       0001       01/02/2015
2       0001       02/02/2015
3       0001       03/02/2015
4       0002       03/02/2015

在linq中,我想获得单个(分组)序列码的最大ID。之后,我想订购降序时间戳的结果。

在这个例子中,首先,我想要提取以下行:

id   serialcode    timestamp
3       0001       03/02/2015
4       0002       03/02/2015

然后我想按降序时间戳订购。 如何在Linq中实现这一目标?

谢谢

2 个答案:

答案 0 :(得分:3)

db.Table.GroupBy(x => x.serialcode)
        .Select(g => g.OrderByDescending(x => x.id).First())
        .OrderByDescending(x => x.timestamp);

答案 1 :(得分:1)

另一种方法是使用 Max() 功能:

var qry = from r in dt.AsEnumerable()
        group r by r.Field<string>("serialcode") into grp
        select new {
            id = grp.Max(a=>a.Field<int>("id")),
            serialcode = grp.Key,
            timestamp = grp.Max(a=>a.Field<DateTime>("timestamp"))
        };

结果(如预期):

id    serialcode    timestamp
3    0001            2015-02-03 00:00:00 
4    0002            2015-02-03 00:00:00