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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage