我想将此 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()
要在 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 };