繁体   English   中英

LINQ - EF - 从或加入

[英]LINQ - EF - FROM or JOIN

我使用 c#、linq 和 EF4。

我的数据库中有两个表,用我的概念 Model 表示:

数据库表:

CmsContents
CmsCategories
CmsRelatedCategories (Pure Juction Table)

实体类型:

CmsContent
CmsCategory

实体集:

CmsContents
CmsCategories

我有一些导航属性:

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

我需要查询实体框架来检索未在联结表中关联的选定内容的类别列表。

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

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

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

我需要显示与特定内容不相关的类别列表

  • 知道怎么做吗?
  • 我可以用 JOIN 来做吗? (EF没有map直接他纯接线表)

您能否给我写下 LINQ 查询,以便我有清晰的图片。 谢谢你的帮助。

你可以试试:

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
}

我认为您想从 CmsCategories 中CmsCategories并排除关联表的任何内容。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM