【问题标题】:Select last records in sorted groups选择已排序组中的最后一条记录
【发布时间】:2016-09-29 17:59:14
【问题描述】:

我有一个 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] LastOrDefaultf__AnonymousTypee'6' 方法,该方法不能翻译成存储表达式。" 错误。

谁能帮我弄清楚我做错了什么?

【问题讨论】:

  • 你确定这是 LINQ to SQL(在标题中)而不是实体?

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


【解决方案1】:

您不能在 LINQ to 实体查询中使用Last/LastOrDefault,因为没有可用的翻译底层数据源语言(SQL)。而是按降序对记录进行排序,然后获取第一个或默认值,例如:

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

【讨论】:

    猜你喜欢
    • 2013-03-05
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多