Verwendung von Prädikaten in LINQ to Entities für Entity Framework-Objekte
Ich verwende LINQ to Entities für Entity Framework-Objekte in meiner Datenzugriffsebene.
Mein Ziel ist es, so viel wie möglich aus der Datenbank zu filtern, ohne Filterlogik auf speicherinterne Ergebnisse anzuwenden.
Zu diesem Zweck übergibt Business Logic Layer ein Prädikat an Data Access Layer.
ich meine
Func<MyEntity, bool>
Also, wenn ich dieses Prädikat direkt benutze, wie
public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
return qry = _Context.MyEntities.Where(x => isMatched(x));
}
Ich bekomme die Ausnahme
[System.NotSupportedException] --- {"Der LINQ-Ausdrucksknotentyp 'Invoke' wird in LINQ to Entities nicht unterstützt."}
Lösung indiese Frage schlägt vor, die AsExpandable () - Methode von zu verwendenLINQKit Bibliothek.
Aber wieder mit
public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
return qry = _Context.MyEntities.AsExpandable().Where(x => isMatched(x));
}
Ich bekomme die Ausnahme
Objekt vom Typ 'System.Linq.Expressions.FieldExpression' kann nicht in 'System.Linq.Expressions.LambdaExpression' umgewandelt werden
Gibt es eine Möglichkeit, Prädikat in LINQ to Entities-Abfragen für Entity Framework-Objekte zu verwenden, damit es korrekt in eine SQL-Anweisung umgewandelt wird.
Vielen Dank.