微软官方的教程如下:
在自己的项目中应用到了内联接和左外联接,而且是一起应用的;项目需求是这样的,在查询组织机构(B_Organizations)信息时,需要把类别名称和父机构的名称查询出来,这就需要与字典表(B_DataDictionaries)实施内联接、与自己实施左外联接(即便组织机构的ParentID在从表中没有对应记录,或者说与从表的OrganizationsID没有对应,也照样输出,默认是null,需自行处理成空字符串)。
Linq查询如下:
from org in B_Organizations join dic in B_DataDictionaries on org.TypeID equals dic.DataID join org2 in B_Organizations on org.ParentID equals org2.OrganizationID into groupOrg2 from o2 in groupOrg2.DefaultIfEmpty() select new { org.OrganizationName, org.OrganizationCode, dic.DataName, ParentOrganizationName = (o2 == null ? "" : o2.OrganizationName) }
核心表B_Organizations,简称org。在关键字equals左边可以看到整个查询只为两个字段服务:org.TypeID、org.ParentID。
普通的join,其实就是Inner Join,所以在Select从句中,直接 dic.DataName便可以;
而左外联结Left Outer Join是需要 DefaultIfEmpty()方法配合的,所以需要把 org2 的联接集合临时放入 groupOrg2中:
from o2 in groupOrg2.DefaultIfEmpty()
那么在 Select从句中,从 o2 中便可以获取到 OrganizationName。