• 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)));
    
  • 相关阅读:
    Linux 文件权限
    spak数据倾斜解决方案
    逻辑时钟
    kafka入门
    深入学习MySQL事务:ACID特性的实现原理
    程序员的诗
    java技术突破要点
    一个请求过来都经历了什么
    如何保持长时间高效学习
    你的系统如何支撑高并发
  • 原文地址:https://www.cnblogs.com/dudu/p/ef-many-to-many-linq-not-in.html
Copyright © 2020-2023  润新知