2011-07-12 25 views
1

我使用c#,linq和EF4。Linq - EF:如何查詢Junction表?

我已經在我的概念模型代表了我的數據庫的兩個表:

數據庫表:

CmsContents 
CmsRelatedContents (Junction table) 

實體類型:

CmsContent 

我有一些導航特性:

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 

我需要使用Linq或EF,以檢索在ToContentId列相關聯Objects in CmsContent過濾結表具體的FromContentId

你有一個想法如何做到這一點?

請給我提供代碼示例。感謝您的幫助!


編輯:解決方案從您的支持

// 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

的,什麼是你試試?像*給我一些代碼plz?*不常見,尤其是如果你沒有顯示任何你試過的東西。 –

+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