Linq to Entities加入

时间:2011-02-07 15:22:50

标签: c# asp.net database linq-to-entities

在使用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;

2 个答案:

答案 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