在使用Linq to Entities时,我有一个关于连接的问题。根据文档,没有限定符的连接上的使用就像左外连接一样。但是,当我执行下面的代码时,我得到一个返回零的计数。但是如果我注释掉三个连接线,我得到的数量为1.这表明连接充当内连接。我有两个问题。一个在内部或外部作为默认值?第二,我如何做另一个,即内部或外部?关于内在和外在的关键词不起作用。
var nprs = (from n in db.FMCSA_NPR
join u in db.FMCSA_USER on n.CREATED_BY equals u.ID
join t in db.LKUP_NPR_TYPE on n.NPR_TYPE_ID equals t.ID
join s in db.LKUP_AUDIT_STATUS on n.NPR_STATUS_ID equals s.ID
where n.ROLE_ID == pRoleId
&& n.OWNER_ID == pOwnerId
&& n.NPR_STATUS_ID == pNPRStatusId
&& n.ACTIVE == pActive
select n).ToList();
if (nprs.Count() == 0)
return null;
答案 0 :(得分:1)
连接没有键操作就像内部连接一样。我目前在文档中找不到它,但是当我这样做时我会发布一个编辑。但是,要执行左外连接,以下是来自101 LINQ Samples的示例:http://msdn.microsoft.com/en-us/vcsharp/ee908647#leftouterjoin
答案 1 :(得分:1)
默认情况下,LINQ中的联接是内部的。要执行外部联接,您必须执行手动“if-null-then”或编写自己的自定义联接操作。
带有手动if-null的左外示例:
var query = from person in people
join pet in pets on person equals pet.Owner into gj //inner
from subpet in gj.DefaultIfEmpty()
select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) }; //left outer