У меня есть следующая модель.Как получить все элементы и назначить их?
Subscription Packages PackageWidgets Widgets
------------ -------- -------------- -------
ID ID < PackageID ID
PackageID > WidgetID >
Я использую Entity Framework 4 и Subscription
имеет отношения к Package
. И Package
имеет отношение к списку Widgets
.
Используя Linq, я пытаюсь получить листинг всеWidgets
и если они включены в текущую подписку. Возможно, из-за моего фона SQL я просто не вижу запроса в Linq. SQL будет включать SELECT из виджетов с LEFT JOIN через подзаголовок Subscriptions, Packages и PackageWidgets на основе переданного в SubscriptionID.
Результат, который я ожидал бы, был бы чем-то вроде WidgetID,IsIncluded
, так что у меня были бы все идентификаторы виджетов и логическое значение, указывающее статус включения.
Кажется, я даже не могу получить что-то отдаленно близко к работе, чтобы показать, что я сделал до сих пор.
Может ли кто-нибудь предоставить мне некоторые сведения о том, как выполнить мой запрос?
Обновление: Вот что я сблизил, но он по-прежнему не работает. Может быть, это поможет проиллюстрировать то, что я пытаюсь сделать, хотя:
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
}
Update # 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)
}
Спасибо за помощь!
Это похоже, что он должен работать, хотя я собираюсь уйти сегодня и не могу вернуться до этого. Спасибо за подсказку ExecuteStoreQuery! – BradBrening