私は次のモデルを持っています。
Subscription Packages PackageWidgets Widgets
------------ -------- -------------- -------
ID ID < PackageID ID
PackageID > WidgetID >
私はEntityFramework4を使用してSubscription
いますが、との関係がありPackage
ます。そしてPackage
、のリストとの関係がありWidgets
ます。
Linqを使用して、すべて Widgets
のリストを取得しようとしています。それらが現在のサブスクリプションに含まれているかどうかを確認します。おそらく、Linqでクエリが表示されないのは、SQLのバックグラウンドが原因です。SQLには、ウィジェットからのSELECTが含まれ、SubscriptionIDで渡されたものに基づいて、Subscriptions、Packages、およびPackageWidgetsのサブセレクトを介したLEFTJOINが含まれます。
私が期待する出力は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)
}
助けてくれてありがとう!