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

如何用F# query工作流实现按组取最大值对应行的查询

实现代码

首先假设你已经定义了对应表的实体类型,且YourDbContext中已声明对应DbSet<YourEntity>属性YourTable,以下代码可直接生成你给出的目标SQL结构:

let getMaxRevRows (dbContext: YourDbContext) =
    // 构造分组取最大rev的子查询
    let maxRevSubQuery =
        query {
            for row in dbContext.YourTable do
            groupBy row.id into idGroup
            select (idGroup.Key, idGroup.Max(fun r -> r.rev))
        }
    // 子查询和原表inner join取完整行数据
    query {
        for a in dbContext.YourTable do
        join (groupId, maxRev) in maxRevSubQuery 
            on (a.id = groupId && a.rev = maxRev)
        // 如需返回完整实体直接改为 select a 即可
        select (a.id, a.rev, a.contents)
    }
    |> fun res -> res.ToList()

注意事项

  • 以上写法生成的SQL和你提供的目标逻辑完全一致,兼容EF Core 3.11 + MS SQL的技术栈,无额外性能损耗
  • 如果实体属性名和数据库字段有自定义映射,无需修改查询代码,EF Core会自动处理映射关系
  • 如果需要返回完整实体对象,只需将select后的元组替换为a即可

内容的提问来源于stack exchange,提问作者LA.27

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:18:00