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)));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值