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

如何在LINQ查询中正确使用Min()和Max()?SQL转LINQ求助

将SQL转换为LINQ的解决方案

你的SQL本质是关联三个表后按指定字段分组,提取每组的最小时间戳和最大Pr值,同时返回分组字段。以下是对应的LINQ实现,提供两种常用写法:

查询语法(接近SQL结构,可读性强)

var result = from r in db.Records
             join e in db.Exercises on r.ExerciseId equals e.Id
             join u in db.Users on r.UserId equals u.Id
             group new { r, e, u } by new 
             {
                 r.ExerciseId,
                 r.UserId,
                 e.Name,
                 u.FirstName,
                 u.LastName,
                 e.SubHeader,
                 e.PrType
             } into g
             select new 
             {
                 TimeStamp = g.Min(x => x.r.TimeStamp),
                 g.Key.ExerciseId,
                 g.Key.UserId,
                 Pr = g.Max(x => x.r.Pr),
                 g.Key.Name,
                 g.Key.FirstName,
                 g.Key.LastName,
                 g.Key.SubHeader,
                 g.Key.PrType
             };

方法语法(链式调用,灵活度高)

var result = db.Records
    .Join(db.Exercises, r => r.ExerciseId, e => e.Id, (r, e) => new { r, e })
    .Join(db.Users, re => re.r.UserId, u => u.Id, (re, u) => new { re.r, re.e, u })
    .GroupBy(x => new 
    {
        x.r.ExerciseId,
        x.r.UserId,
        x.e.Name,
        x.u.FirstName,
        x.u.LastName,
        x.e.SubHeader,
        x.e.PrType
    })
    .Select(g => new 
    {
        TimeStamp = g.Min(x => x.r.TimeStamp),
        g.Key.ExerciseId,
        g.Key.UserId,
        Pr = g.Max(x => x.r.Pr),
        g.Key.Name,
        g.Key.FirstName,
        g.Key.LastName,
        g.Key.SubHeader,
        g.Key.PrType
    });

关键说明

  • 用join替代SQL中的隐式连接,避免潜在的笛卡尔积问题,逻辑更清晰。
  • group by后的匿名类完全对应SQL的GROUP BY字段列表。
  • 在select阶段,通过g.Min()和g.Max()分别提取每组的最小时间戳和最大Pr值,和SQL的聚合函数逻辑一致。
  • 确保你的数据上下文(db)中Records、Exercises、Users三个DbSet对应数据库的三个表,实体类属性名和数据库字段匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:05:49