LINQ - EF - FROM或JOIN

时间:2011-07-11 12:35:59

标签: c# linq linq-to-entities

我使用c#,linq和EF4。

我的概念模型中的数据库中有两个表:

数据库表:

CmsContents
CmsCategories
CmsRelatedCategories (Pure Juction Table)

实体类型:

CmsContent
CmsCategory

Entyt Set:

CmsContents
CmsCategories

我有一些导航属性:

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

我需要查询实体框架,以检索Junction表中未关联的所选内容的类别列表

目前我使用此代码(注意两个FROM):

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

返回整个数据库中未关联的所有类别的列表,而不是特定内容。

我需要显示与 SPECIFIC Content

相关联的类别列表
  • 知道怎么做吗?
  • 我可以加入吗? (EF不会直接映射他的纯接点表)

你能不能给我写LINQ查询,这样我就可以清楚地了解情况。 谢谢你的帮助。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

我想您要从CmsCategories中进行选择,并在关联表中排除 中的任何内容。

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