簡體   English   中英

LINQ 使用 EF Core 查詢以從多對多關系中查找具有匹配項的記錄

[英]LINQ query with EF Core to find records with matching items from many-to-many relationship

我對 .NET 和 EF Core 很陌生,我正在構建一個分類列表類型的應用程序。 我想比較記錄並根據標簽(通過實體框架中的多對多關系鏈接)找到匹配的通緝/待售分類。

首先,我試圖確保用戶沒有嘗試添加重復的列表。 我花了非常多的時間試圖弄清楚如何編寫查詢,但我嘗試的一切都在運行時出現異常,我覺得我一遍又一遍地嘗試同樣的事情。

我認為這個查詢應該可以工作,但我不知道為什么它不工作,它構建時沒有任何錯誤,但在運行時出現“指定的過濾條件無效”的異常:

public bool IsDuplicate(Classified classified)
{
    var idSet = classified.ClassifiedTags.Select(ct => ct.Tag.Id).ToHashSet<int>();
    var query = from c in _context.Classified 
                where c.ClassifiedTags.Select(ct => ct.Tag.Id).ToHashSet<int>().SetEquals(idSet) &&
                      c.User == classified.User
                select c;

    // .... return true if a record is found
}

這些表在 EF Core 中設置了多對多連接:Classified <-> ClassifiedTag <-> Tag

我的 ApplicationDbContext 看起來像這樣

public DbSet<Tag> Tags { get; set; }
public DbSet<Classified> Classified { get; set; }
public DbSet<ClassifiedTag> ClassifiedTags { get; set; }

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<Tag>().ToTable("Tag");
    builder.Entity<ClassifiedTag>().ToTable("ClassifiedTag");

    builder.Entity<ClassifiedTag>()
        .HasKey(ct => new { ct.ClassifiedId, ct.TagId });

    builder.Entity<ClassifiedTag>()
        .HasOne(c => c.Classified)
        .WithMany(ct => ct.ClassifiedTags)
        .HasForeignKey(ct => ct.ClassifiedId);

    builder.Entity<ClassifiedTag>()
        .HasOne(t => t.Tag)
        .WithMany(ct => ct.ClassifiedTags)
        .HasForeignKey(ct => ct.TagId);
}

我的分類 model 看起來像這樣:

public class Classified
{
    public Guid Id { get; set; }
    public int Type { get; set; }
    public ApplicationUser User { get; set; }
    public DateTime DateCreated { get; set; }
    public List<ClassifiedTag> ClassifiedTags { get; set; }
}

public class ClassifiedTag {
    public Guid ClassifiedId { get; set; }
    public Classified Classified { get; set; }
    public int TagId { get; set; }
    public Tag Tag { get; set; }
}

我的標簽 model 看起來像這樣:

public class Tag
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<ClassifiedTag> ClassifiedTags { get; set; }
}

我覺得這應該很簡單,但此時我真的很想得到一些想法,任何幫助都將不勝感激!

在您的查詢ToHashSet<int>()無法轉換為 SQL 並發生異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM