获取列的每个不同值的最新记录

时间:2020-06-30 11:21:08

标签: c# entity-framework

我有一个这样的消息表:

Id     Message     Column1
--------------------------
1      asdasdd     1
2      dsfsfsf     1
3      safsafs     2
4      afewfff     3
5      adw qwd     2

我想获取Column1上每个不同值的最新记录,这表示通过此代码的第2、4和5行:

Messages.OrderByDescending(a => a.Id).GroupBy(a => a.Column1).Select(a => a.Key).ToList();

我只需要ID行,但什么也没有返回。我已经用sql完成了操作,但是无法转换为EF lambda。

select max(Id) as Id from [Messages]
group by Column1
order by Id DESC

1 个答案:

答案 0 :(得分:1)

您正在选择key,在group by中表示column1,您正在其中对值进行分组。如您所料,获取值的一种方法是尝试如下操作:

var query = Messages.GroupBy(item => item.Column1).Select(group =>   group.Last().Id)
        .OrderBy(item => item.Id)
        .Select(a => a.Id)
        .ToList();

或获取完整的行:

var query = Messages.GroupBy(item => item.Column1)
        .Select(group => group.Last())
        .OrderBy(item => item.Id)
        .Select(a => a)
        .ToList();