2011-07-11 18 views
0

私はc#、linq、EF4を使用します。LINQ - EF - FROMまたはJOIN

データベーステーブル:

CmsContents 
CmsCategories 
CmsRelatedCategories (Pure Juction Table) 

エンティティタイプ:

CmsContent 
CmsCategory 

Entytセット:

CmsContents 
CmsCategories 

は、私は私の概念モデルで表され、私のデータベースに2つのテーブルを持っています

Ihいくつかの航海プロパティAVE:

for CmsContents --> CmsCategories --> Return Collection of Cms CmsCategory 
for CmsCategories --> CmsContents --> Return Collection of Cms CmsContents 

私はにEntity Frameworkのを問い合わせる必要がジャンクションテーブルに関連付けられていない選択したコンテンツのためのカテゴリのリストをretrive。私はこのコードを使用瞬間

(からの二つの点に注意してください):

var categories = from category in context.CmsCategories 
       from content in category.CmsContents 
       select category; 

データベース全体ではなく特定のコンテンツに関連付けられていないすべてのカテゴリのリストを返します。

は私が特定のコンテンツ

  • それを行うにはどのように任意のアイデアをカテゴリーではない仲間のリストを表示必要がありますか?
  • JOINでやってもいいですか? (EFは純粋な接合テーブルを直接マッピングしません)

私は明確な画像を得るためにLINQクエリを書いてください。 ご協力ありがとうございます。

+0

あなたは私たちにあなたが「特定のコンテンツ」 – Nix

+0

こんにちはnixのをフィルタに滑走されている方法の例を与えることができ、私は私の質問は、十分に明確だった願って、問題は、私は、特定のコンテンツ上で動作することはできませんよです。どのようにそれを解決するための任意のアイデア? – GibboK

答えて

0

あなたは試みることができる:

CmsCategories.Except(myContent.CmsCategories) 

myContentはあなたが前にそれを取得し、あなたが遅延ロードを有効にしていると仮定すると、CmsContentのインスタンスです。

編集:コードの可能サンプル:

var myContent = context.CmsContents.FirstOrDefault(c => c.Id == 1); 
var contentCategories = myContent.CmsCategories; 
var otherCategories = context.CmsCategories.Except(contentCategories); 
foreach (var item in otherCategories) 
{ 
//whatever you need to do 
} 
+0

Matteoさん、ありがとうございました。あなたが私に提案したコードをどこに置くことができますか? – GibboK

+0

また、 'WebProject.DataAccess.DatabaseModels.CmsCategory'型の定数値を作成できません。このコンテキストでは、プリミティブ型( 'Int32、String、およびGuid'など)のみがサポートされています。 – GibboK

+0

私が投稿したコードは、特定の製品に属していないカテゴリのコレクションを返すクエリです。あなたはそれが必要なところに置くでしょう、私は本当にあなたの最後の質問を理解していません。あなたが投稿したエラーは正当なエラーですが、仕事をするための文脈を私に提供していないと、なぜあなたがそれを得ているのか分かりません。 –

0

私はあなたがCmsCategoriesから選択してで連想テーブルで何かを除外したいと思います。

var query = 
      context 
       .CmsCategories 
       .Except(context.CmsRelatedCategories.Select(x=>x.CmsCategory));