2011-02-07 302 views
2

当使用Linq到实体时,我有一个关于连接的问题。根据文档,没有限定符的连接使用就像左外连接一样。但是,当我执行下面的代码时,我得到的计数返回为零。但是,如果我注释掉这三条连接线,我会得到1的计数。这将表明连接充当内连接。我有两个问题。默认情况下是内部还是外部?第二,如何做另一个,即内部或外部?内部和外部的关键词不起作用。Linq to Entities加入

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; 

回答

1

LINQ中的连接默认为内部连接。要执行外连接,您必须执行手动“if-null-then”或编写自己的自定义连接操作。

具有手动左外例如,如果空:

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