Ich habe eine generische Methode zum Abfragen von Objekten des Typs TEntity in EF. Ich möchte eine Bedingung als where-Klausel hinzufügen, wenn TEntity eine bestimmte Schnittstelle implementiert. Die Methode, die ich habe, ist:Cast-Entity zu implementierten Schnittstelle in einer generischen Methode mit LINQ für Entity Framework
public TEntity GetByUserID(Guid userID)
{
var query = this.DbSet;
if (typeof (TEntity).IsImplementationOf<IDeletableEntity>())
{
query = query
.Where((x => !((IDeletableEntity)x).IsDeleted);
}
return query
.FirstOrDefault(x => x.UserID == userID);
}
IsImplementationOf <>() ist Methode, die gerade wieder wahr/falsch, wie der Name schon sagt.
Als ich dies für die Entität Adresse ausgeführt, die IDeletableEntity implementieren, bekomme ich einen Fehler:
Unable to cast the type 'Address' to type 'IDeletableEntity'. LINQ to Entities only supports casting EDM primitive or enumeration types.
Irgendwelche Ideen, wie ich, um diese Einschränkung von LINQ gehen kann?
Diese wird wahrscheinlich funktionieren, aber zuerst in die Datenbank gehen und alle Elemente holen, sie in eine Liste umwandeln und sie dann im Speicher filtern. Die gefundene Lösung sendet die Bedingung an die Datenbank, d. H. Sie erhalten nur die Elemente mit dem korrekten Flag-Wert. – Vladimir
Nochmal, wie ich zu Vladimir gesagt habe, wie kann das funktionieren, es sei denn, ein IDeletable ist zu einem T castable – War