【发布时间】:2013-06-19 02:39:24
【问题描述】:
所以我有两个表 Site 和 Contact ,它们通过 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
感谢任何帮助
【问题讨论】:
-
第二个 - 简单,简洁 - 代码示例是否有效?如果是这样,您为什么需要子查询?
-
第二个代码示例在 linqpad 中编写时有效,但在 C# vs2012 中无效,因为没有 ContactSites 的模型
-
但是第一个查询也不起作用,因为您正在加入 ContactSites。
-
好吧,两个查询都在 linqpad 中工作,换句话说,它们返回数据..第二个返回正确的数据......你是对的,没有一个在 VS C# 中工作,因为没有用于相交的模型表...但是我该怎么做才能解决这个问题
-
创建 ContactSite 实体,并将其添加到您正在查询的上下文中...
标签: linq entity-framework nested-queries