2013-11-01 14 views
5

この図に示すようなテーブルレイアウトがあります。 1つのメインテーブル(ユーザ)、およびジャンクションテーブルを持つ2つの多対多テーブル(プリファレンスおよびロケーション)。私はから(Entity Frameworkの多対多テーブルへの結合

enter image description here

私が書いているレポート・ツールは、ユーザーが選択することができます....これらのM-2-mのテーブルからの選択を可能にするために、データモデル内の正しい関係を設定していますチェックリスト)にユーザーの好みやユーザーの場所が表示されます。私がしたいのは、ユーザーテーブルのレコードのみを選択することです。環境設定またはロケーションには、少なくとも1つの選択肢が含まれています。

これはLinqクエリで可能ですか? (私はSQLでこれを行う以前になかったが、私がこの部分に着くまでのLINQで書くことが容易に見えた!)

多くのおかげで、

EDIT:Visual Studioの2012年、Entity Frameworkの4、SQL Server 2008 R2を

+0

Users.Where 'のような何か(X => Preferences.Any(Y => y.UserID == x.UserID)|| Locations.Any(Y => y.UserID == X .UserID)); '? –

答えて

3
​​

これにより、2つのEXISTSサブクエリが生成されます。ラムダ構文:

Users.Where(u => u.Locations.Any(l => l.Name == value) || 
       u.Preferences.Any(p => p.Title == value)); 
+1

ありがとうございます!これは私の脳を老化させています。 : -/ – Simon

+0

思ったとおり、比較する値の動的リストがある場合、l.Name == "xxx"を使用するよりも、これを書く方が良いですか? l.Name == "yyy" || l.Name == "zzz"? – Simon

+1

@Simonあなたは '{" xxx "、" yyy "、" zzz "}'の値のリストを作成し、このリストに位置や嗜好の値が含まれているかどうかを調べることができます: 'u.Locations.Any(l => values.Contains(l .Name)) '。サブクエリで動作するはずだと思います。 –

関連する問題