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)));

你可能感兴趣的:(EF(Entity Framework)多对多关系下用LINQ实现"NOT IN"查询)