SQL -> LINQ - 具有空值的多个左连接

问题描述 投票:0回答:1

我想将此 sql 查询转换为 LINQ

left join @categories oc    on OC.course_id = t.course_id   and isnull( t.offlinecategory_id,-1) = isnull(oc.offlinecategory_id,-1)   

我尝试过这种方式,但 sql 和 LINQ 的结果不一样

join drv in categories on new { a1 = t?.CourseID ?? 0, a2 = (t?.OfflineCategoryID ?? -1) } equals new { a1 = drv.CourseId, a2 = drv.OfflineCategoryId ?? -1 } into cgroup from oc in cgroup.DefaultIfEmpty()

sql performance linq null left-join
1个回答
-1
投票

要在 LINQ 中复制此逻辑,您应该: 使用 join 和 new { } 来定义复合键。 使用 null 合并运算符 (??) 将 -1 应用为可为 null 的字段的默认值。 使用 DefaultIfEmpty() 处理左连接行为。

var 查询 = 来自 mainTable 中的 t 加入 drv 的类别 新的{ 课程ID = t?. 课程ID ?? 0、OfflineCategoryID = t?.OfflineCategoryID ?? -1 } 等于 new { CourseID = drv.CourseID, OfflineCategoryID = drv.OfflineCategoryID ?? -1 } 进入cgroup from oc in cgroup.DefaultIfEmpty() // 这处理 LEFT JOIN 选择新的 { // 从主表 (t) 和连接表 (oc) 中选择字段 t.课程ID, t.OfflineCategoryID, CategoryCourseID = oc?.CourseID, // 如果没有匹配,则为 null CategoryOfflineCategoryID = oc?.OfflineCategoryID };

© www.soinside.com 2019 - 2024. All rights reserved.