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

如何用LINQ查询语法实现Group By后筛选符合条件的WorktypeWorkID

SQL转LINQ查询语法解决方法

你的目标SQL要实现的逻辑是:筛选出WorktypesWorksLevels表中,分组后最大LevelID不等于3的WorktypeWorkID,再用这些ID过滤主查询的数据。

你写的尝试代码有两个核心错误:

  • 计算最大值时错误使用了WorktypeWorkID,应该取LevelID的最大值
  • 没完成MaxLevelID !=3的筛选,也没提取出符合条件的ID集合来做Contains判断(对应SQL的IN)

正确的LINQ查询语法

假设主查询的实体表是MainTable,完整写法如下:

// 先获取符合条件的WorktypeWorkID集合
var validWorkIDs = from level in ctx.WorktypesWorksLevels
                   group level by level.WorktypeWorkID into grouped
                   let maxLevel = grouped.Max(l => l.LevelID)
                   where maxLevel != 3
                   select grouped.Key;

// 主查询用Contains实现SQL的IN逻辑
var queryResult = from item in ctx.MainTable
                  where validWorkIDs.Contains(item.WorktypeWorkID)
                  select item;

如果偏好链式语法,也可以写成:

var validWorkIDs = ctx.WorktypesWorksLevels
                      .GroupBy(l => l.WorktypeWorkID)
                      .Select(g => new { WorkID = g.Key, MaxLevel = g.Max(x => x.LevelID) })
                      .Where(p => p.MaxLevel != 3)
                      .Select(p => p.WorkID);

var queryResult = ctx.MainTable.Where(item => validWorkIDs.Contains(item.WorktypeWorkID));

关键点解释

  1. 先通过分组得到每个WorktypeWorkID对应的最高LevelID,筛选出最高级别不是3的ID
  2. 主查询中用Contains方法对应SQL里的IN操作,完成最终过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:58:02