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

时间:2016-09-29 17:59:15

标签: c# sql-server entity-framework linq

我有一个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] LastOrDefault<> f__AnonymousTypee'6'方法,此方法无法转换为商店表达式。“错误。

任何人都可以帮我弄清楚我做错了吗?

1 个答案:

答案 0 :(得分:2)

您无法在LINQ中使用Last / LastOrDefault实体查询,因为在铺设数据源语言(SQL)时没有可用的转换。而是按降序对记录进行排序,然后获得第一个或默认值:

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