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

如何将带GROUP BY的两表关联SQL查询转换为C# Linq?

将指定SQL转换为C# LINQ语句

原SQL的逻辑是:从com.DepartmentPersonnel表中,筛选出每个部门(DepartmentID)下职位类型ID(JobTypeID)最小的完整记录。以下是对应的C# LINQ实现:

查询语法风格

var result = from q1 in db.DepartmentPersonnel
             join q2 in (
                 from dp in db.DepartmentPersonnel
                 group dp by dp.DepartmentID into grouped
                 select new {
                     DepartmentID = grouped.Key,
                     MinJobTypeID = grouped.Min(dp => dp.JobTypeID)
                 }
             ) on new { q1.DepartmentID, q1.JobTypeID } equals new { q2.DepartmentID, q2.MinJobTypeID }
             select q1;

方法链语法风格

// 先构建子查询:按部门分组,获取每个部门的最小JobTypeID
var departmentMinJobType = db.DepartmentPersonnel
                             .GroupBy(dp => dp.DepartmentID)
                             .Select(grouped => new {
                                 DepartmentID = grouped.Key,
                                 MinJobTypeID = grouped.Min(dp => dp.JobTypeID)
                             });

// 关联原表与子查询,筛选出符合条件的记录
var result = db.DepartmentPersonnel
               .Join(departmentMinJobType,
                     person => new { person.DepartmentID, person.JobTypeID },
                     minJob => new { minJob.DepartmentID, minJob.MinJobTypeID },
                     (person, _) => person);

说明

  • db 是你的数据库上下文实例(比如Entity Framework中的DbContext),DepartmentPersonnel是对应数据库表的DbSet<DepartmentPersonnel>。
  • 两种写法逻辑完全一致,可根据个人习惯选择使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:37:32