选择已排序组中的最后记录

本文关键字:最后 记录 排序 选择 | 更新日期: 2023-09-27 18:09:28

我有一个linq查询的结果,这是两个SQL表之间的连接

var result1 = db.TABLE1.Join(
    db.TABLE2, 
    p1 => p1.ID, 
    p2 => p2.ID, 
    (p1, p2) => new 
    { 
        Id = p1.ID, 
        Date = p2.DATE, 
        Prop1 = p1.Prop1, 
        Prop2 = p2.Prop2, 
        Prop3 = p2.Prop3, 
        Prop4 = p2.Prop4
    });

然后我尝试按Id对结果进行分组并选择每个Id

具有最新日期的行
var result2 = result1.GroupBy(p => p.Id)
    .Select(q => q.OrderBy(p => p.Date).LastOrDefault())
    .ToList();

但是用

就不行

LINQ to Entities不识别方法'<>f__AnonymousTypee'6[System. decimal,System. double,System. nullable '1[System. decimal],System. nullable '1[System. decimal],System. string,System. string,System. string。String] LastOrDefault<>f__AnonymousTypee'6'方法,此方法无法转换为存储表达式。"错误。

有谁能帮我找出我做错了什么吗?

选择已排序组中的最后记录

你不能在LINQ中使用Last/LastOrDefault来查询实体,因为没有可用的转换到底层数据源语言(SQL)。相反,按降序对记录进行排序,然后获得第一个或默认值,如:

q.OrderByDescending(p => p.Date).FirstOrDefault()