linq中left join和inner join的正确用法

简介: linq中left join和inner join的正确用法

之前一直分不清,left join 在linq中应该如何正确的表述,现在决定写篇帖子来记录下来,也许会对你有帮助。

1.inner join

为何先说这个呢,因为,如果你不是很会linq,那么你写出来的linq应该是这种形式的,先看代码:

var query = from a in db.Set<BsWorkFormList>().Undeleted(a => a.BsDisFormVerId != null)
                            join d in db.Set<BsDicFormVersion>().Undeleted() on a.BsDisFormVerId equals d.Id
                            join b in db.Set<BsDicForm>().Undeleted() on d.FormId equals b.Id
                            join c in db.Set<BsDicCert>().Undeleted() on b.CertId equals c.Id
                            where a.WorkId == workId && c.CertCode == certCode
                            select new { a.BsDisFormVerId };

这种写法,只返回那些在另一个数据集中具有匹配项的对象。

也可以如下所示:

var q= a.Join(b,T1 => T1.ID,T2 => T2.ID, (T1,T2) => new {
        Name = T1.Name,
        ID=T1.ID,
        NickName = T2.NickName
});

这两种写法的区别是,第一种是用linq查找语句写的,第二种是linq查询方法写的,结果最终肯定相同

2.left join

sql语句中的left join 在linq中描述的话,和上述语句略有不同,主要是要加一句 into..,如下所示

var cert = from a in db.Set<SmShipCert>().Undeleted()
                               join b in db.Set<BsDicCert>() on a.Certcode equals b.CertCode into join1
                               from b in join1.DefaultIfEmpty()
                               where b.CertType == StaticVar.CERT_CLASS && a.JobId == workList.JobId
                               select new { a.Certcode };

其实,在查询时,实际上会将join语句后的匹配结果放到into的对象中,然后在连接在一起。

至此,总结如下:

Linq联接语法

查询方法 查询表达式 语法说明
Join join… in… on …equals… 内部联接。类似于T-SQL 中的inner join。
GroupJoin join…in…on…equals…into… 分组联接,类似于T-SQL中的left join or right join,常用于返回“主键对象-外键对象集合形式查询。

 

有时候,对于相同数据源,inner join 和left join 的结果是相同的,所以linq中怎么写都无所谓,但更多的情况下,这两者的结果差非常明显,所以在写linq时一定要注意使用正确的用法。

相关文章
|
1月前
|
关系型数据库 数据挖掘 数据库
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
45 2
|
1月前
|
关系型数据库 数据挖掘 数据库
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
53 1
|
3月前
|
SQL 关系型数据库 MySQL
JOIN的用法
【8月更文挑战第2天】JOIN的用法
109 4
Inner Join与Left Join
Inner Join与Left Join
118 0
|
SQL 数据库
JOIN用法
在实际的数据库应用中,我们经常需要从多个数据表中读取数据,这时我们就可以使用SQL语句中的连接(JOIN),在两个或多个数据表中查询数据。
JOIN用法
|
SQL 数据库
SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
136 0
SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
|
SQL 语音技术 数据库
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
SQL基础【十五、join、Inner join、Left join、Right join、Full join】
160 0
SQL基础【十五、join、Inner join、Left join、Right join、Full join】