[英]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.