EF(Entity Framework)多对多关系下用LINQ实现"NOT IN"查询

这是今天在实际开发中遇到的一个问题,需求是查询未分类的博文列表(未加入任何分类的博文),之前是通过存储过程实现的,今天用EF实现了,在这篇博文中记录一下。

博文的实体类BlogPost是这样定义的:

public class BlogPost
{
public int Id { get; set; } public string Title { get; set; } //.... public ICollection<BlogCategory> Categories { get; set; }
}

分类的实体类BlogCategory是这样定义的:

public class BlogCategory
{
public int CategoryId { get; set; } public string Title { get; set; } //... public ICollection<BlogPost> Posts { get; set; }
}

EF(Entity Framework)中多对多关系是这样定义的:

modelBuilder.Entity<BlogPost>()
.HasMany(p => p.Categories)
.WithMany(c => c.Posts)
.Map(link =>
{
link.MapLeftKey("PostId");
link.MapRightKey("CategoryId");
link.ToTable("blog_links");
});

BlogPost与BlogCategory是多对多关系,现在的需求是查询与BlogCategory没有关系的BlogPost,这个LINQ查询代码该如何写呢?

。。。

今天太忙,没时间写更多文字了,直接上代码吧:

.Where(p => !p.Categories.Any(c => c.Posts.Select(cp => cp.Id).Contains(p.Id)));
上一篇:20155319 2016-2017-2 《Java程序设计》第一周学习总结


下一篇:mpvue图片轮播遇到的问题