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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM