外连接的两种 LINQ 写法

通常的外连接写法

var result = from s in db.Student
             join c in db.Classx
             on s.ClassID equals c.ID into temp
             from p in temp.DefaultIfEmpty()
             select new { s, p };

var res = result.ToList();Code language: JavaScript (javascript)

这是标准的 Group Join + DefaultIfEmpty() 写法,等效 SQL LEFT JOIN,左表(Student)所有记录都保留,右表匹配不到则为 null


更紧凑的写法

var result2 = from s in db.Student
              from c in db.Classx.Where(item => item.ID == s.ClassID).DefaultIfEmpty()
              select new { s, c };

var res2 = result2.ToList();Code language: JavaScript (javascript)

Where 条件直接写在 from 子查询中,配合 DefaultIfEmpty() 实现左连接。代码更紧凑,生成的 SQL 与第一种写法基本一致。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注