如何将带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
相关产品推荐
相关产品推荐

