我有以下模型。
Subscription Packages PackageWidgets Widgets
------------ -------- -------------- -------
ID ID < PackageID ID
PackageID > WidgetID >
我正在使用 Entity Framework 4,并且 aSubscription
与Package
. 并且Package
与一个列表有关系Widgets
。
使用 Linq,我试图获取所有 Widgets
列表以及它们是否包含在当前订阅中。也许是由于我的 SQL 背景,我只是没有在 Linq 中看到查询。SQL 将涉及来自 Widgets 的 SELECT,通过基于传入的 SubscriptionID 的 Subscriptions、Packages 和 PackageWidgets 的子选择进行 LEFT JOIN。
我期望的输出将是WidgetID,IsIncluded
这样的,即我将拥有所有小部件 ID 和一个指示包含状态的布尔值。
为了展示我到目前为止所做的事情,我似乎什至无法获得远程接近工作的东西。
谁能给我一些关于如何完成我的查询的见解?
更新: 这是我已经接近的,但它仍然不起作用。也许它会帮助说明我想要完成的事情:
from subscription in Subscriptions
where subscription.ID == 3
let subWidgets = subscription.Package.Widgets
from widget in Widgets
join subWidget in subWidgets on widget.ID equals subWidget.ID into joined
from list in joined.DefaultIfEmpty()
select new {
ID = widget.ID
,Selected = subWidget.ID != null
}
更新 #2 多亏了接受的答案,这就是我最终要做的——这正是我需要的:
from widget in Widgets
from subWidgets in
from subscription in Subscriptions
where subscription.ID == 3
select subscription.Package.Widgets
orderby widget.ID
select new {
Name = widget.WidgetName,
Available = subWidgets.Contains(widget)
}
感谢您的协助!