You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core 6:按组选最新元素并投影转换遇翻译错误求助

解决EF Core 6中LINQ查询翻译错误问题

你遇到的ProjectionBindingExpression: 0翻译错误,是因为EF Core 6无法将你原有的GroupBy + 内部排序取第一条的写法正确转换成SQL语句。以下是可行的解决方案:

正确实现代码

使用EF Core支持的窗口函数RowNumber来实现“每个评论者最新评论”的逻辑,这种写法能被EF Core正确翻译:

var latestComments = Comments
    .Where(comment => comment.PostId == postId)
    // 生成窗口函数,按评论者分组,修改时间降序排序
    .Select(comment => new
    {
        comment.Id,
        comment.Message,
        comment.CommenterName,
        comment.ModificationTime,
        RowNum = EF.Functions.RowNumber()
            .Over(partitionBy: comment.CommenterName, orderBy: comment.ModificationTime descending)
    })
    // 筛选每个评论者的第一条(最新)评论
    .Where(r => r.RowNum == 1)
    // 投影成需要的结构,用于后续合并分页
    .Select(r => new { r.Id, r.Message })
    .ToList();

关键说明

  1. 窗口函数RowNumber().Over()会按CommenterName分区,每个分区内按ModificationTime降序生成序号,序号为1的就是该评论者的最新评论。
  2. 注意你的实体类字段是ModificationTime,但原代码中写了ModificationTimeUnixTimeInMs,需确保字段名一致,避免编译错误。
  3. 这个查询的结果结构和你另一张表的查询结果匹配,可以直接用Concat合并后执行分页:
var otherTableQuery = ...; // 另一张表返回{Id, Message}结构的查询
var combinedResult = latestComments.Concat(otherTableQuery)
    .Skip(pageSize * (pageIndex - 1))
    .Take(pageSize)
    .ToList();

内容的提问来源于stack exchange,提问作者AmitHaritan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:37:14