Ich habe eine - vielleicht ein wenig peinlich - Frage, dass ich die Antwort nicht herausfinden kann. Ich habe folgende Einheiten:Wie nach mehreren verbundenen Entitäten in Entity Framework zu filtern
public class Post
{
public Guid Id { get; set; }
public string Text { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public Guid Id { get; set; }
public string Name { get; set; }
}
ich die Beziehung konfiguriert sein many-to-many die fließend API:
modelBuilder.Entity<Post>()
.HasMany(p => p.Tags)
.WithMany()
.Map(m =>
{
m.MapLeftKey("PostId");
m.MapRightKey("TagId");
m.ToTable("PostTags");
});
Ich möchte die Beiträge von einer Liste von Tags filtern (nur Rückkehr Beiträge, die alle Tags angegeben haben):
context.Posts.Where(p => p.Tags.Any(t => tags.Contains(t)))
Wo tags
ist eine Liste der vom Benutzer festgelegten Tags und meine Tag
Einheit hat seine Equals
Methode überschrieben basiert auf der Id
Eigenschaft. Aber wenn ich die Abfrage ausführen bekomme ich ein NotSupportedException
:
Eine Ausnahme vom Typ ‚System.NotSupportedException‘ aufgetreten in EntityFramework.SqlServer.dll wurde aber in Benutzercode
Zusätzliche Informationen nicht behandelt: Kann nicht erstellen ein konstanter Wert vom Typ 'Plog.Domain.Plog.Tag'. In diesem Kontext werden nur primitive Typen oder Aufzählungstypen unterstützt.
Wie kann ich diese Arbeit in einer Weise durchführen, die auch einigermaßen performant ist?
Ich nehme an, Tags ist eine Liste von 'Tag'? Wenn ja, das ist das Problem – Balah