2011-07-12 82 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