2011-07-12 8 views
1

私はc#、linq、EF4を使用します。私はいくつかの航海のプロパティを持っているLinq - EF:ジャンクションテーブルを照会するには?

CmsContent 

データベーステーブル:

CmsContents 
CmsRelatedContents (Junction table) 

エンティティタイプ

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

for CmsContent --> CmsContents --> Return Collection of CmsContent --> from role: CmsContent1 to CmsContent (map ToContentId) 
for CmsContent --> CmsContents1 --> Return Collection of CmsContent --> from role: CmsContent to CmsContent1 (map FromContentId) 

データジャンクションテーブルのデータベースに(CmsRelatedContents)が提示されている:

FromContentId ToContentId 
4    3 
5    2 

テーブルCmsContentsで:

ContentId 
2 
3 
4 
5 

IがジャンクションをフィルタリングToContentId列に関連Objects in CmsContentを取得するためのLINQ又はEFを使用する必要特定のテーブルFromContentId

あなたはそれを行う方法がありますか?

コードのサンプルを入力してください。これに助けてくれてありがとう!


EDIT:あなたのサポートからSOLUTION

// Option A: 
      var test = from cnt in context.CmsContents 
         where cnt.CmsContents.Any(t => t.ContentId == contentId) 
         select cnt; 

// Option B: 
     var toContents = context.CmsContents.Where(r => r.CmsContents.Any(t => t.ContentId == contentId)); 

みんなありがとう!

+3

そして、あなたは何をしようとしたのですか? *あなたに何かを試してみないと、特に人気がありません。 –

+0

私はこのvarを試しましたtoContents = context.CmsContents.FirstOrDefault(cnt => cnt.ContentId == contentId && cnt.CmsContents1.Any(from => from.ContentId == contentId))。CmsContents.Any(); – GibboK

+0

しかし、以前はコメントしていただきありがとうございました! – GibboK

答えて

2

わからないが、私が正しくあなたを理解している場合、これは何が必要かもしれません:

dbContext.CmsContent.Where(r => r.CmsContents.Any(t => t.Id = someId))

+0

Piotrさん、ありがとうございます。 :) – GibboK

+0

あなたのテクニックに関するいくつかのリソースを教えてください。私はそれについてもっと読むことができますか?ありがとう – GibboK