0

所以我有两个表站点和联系人,它们通过 ContactSites 表具有多对多关系。Site 和 Contact 表都有一个名为 Deleted 的布尔属性。我正在尝试编写一个 LINQ 查询,其中列出了所有具有已删除属性 = false 并且具有相关站点的联系人也具有已删除属性 = false

这是我正在使用的代码:

from c in Contacts
where c.Deleted == false 
select new{c.LName, c.FName, SiteContactSites = 
                            (from cs in ContactSites
                            where cs.Contact_ID == c.ID
                            select new{ cs.Contact_ID,   cs.Site_ID, Sites = 
                                                                (from s in Sites 
                                                                where cs.Site_ID == s.ID &&
                                                                s.Deleted == false 
                                                                select cs).First()}).First()}

但结果似乎就像我想要的外部联接与内部联接。

我正在专门寻找一种使用嵌套子查询而不是连接的方法来执行此操作:

from c in Contacts
join cs in ContactSites on c.ID equals cs.Contact_ID
join s in Sites on  cs.Site_ID equals s.ID
where c.Deleted == false && s.Deleted == false
select c

任何帮助表示赞赏

4

1 回答 1

0

所以下面的伎俩:

from c in db.Contacts
from co in c.Communities
where co.Deleted == false
select c

当您使用 LINQ to Entities 时,它全部在导航属性中,因此连接发生在“来自 c.Communities 中的 co”。我想我的困惑是我使用的是使用 LINQ to SQL 的 LinqPAD

这个链接很有帮助,让我明白了:

http://peter.hahndorf.eu/blog/post/2010/12/31/UsingLinqInManytomanySelectScenarios

于 2013-06-20T00:22:33.777 回答