Ich versuche, den Filterausdruck von ODataQueryOptions
zu extrahieren, so dass ich es in meiner Business-Logik-Klasse verwenden kann.Wie wird der OData-Filter in einen LINQ-Ausdruck umgewandelt?
public PageResult<Poco> Get(ODataQueryOptions odataQueryOptions)
{
Expression<Func<Poco, bool>> myExpression = ... // what do i do here?
var result = _myBusinessLogic.Search(myExpression);
return new PageResult<Poco>(result, null, null);
}
nahm ich einen Blick auf den Blog here die Abfrage in HQL beschreiben übersetzen, und ich denke (hoffe ich zumindest), das ist zuviel des Guten für das, was ich zu tun bin versucht.
Ich muss im Grunde den Filterausdruck in der Expression<Func<Poco, bool>>
Form erhalten. Ich habe versucht, mit ApplyTo()
zu spielen, aber ich kann es nicht ganz bekommen. Jede Hilfe wird geschätzt.
Danke, ich landete etwas ähnliches. Es sieht so aus, als gäbe es einiges an Operation, um den Filterausdruck aus den Ergebnissen von ApplyTo zu gewinnen - Casting nach MethodCallExpression, Extrahieren von Argumenten und Operanden usw. Etwas besorgt über die Langzeitstabilität dieses Codes. – boris
Ich stelle den Kontext nicht der Anwendungsschicht (API) zur Verfügung, und ich möchte ODataQueryOptions und verwandte Klassen nutzen, um Filter, Seitenumbruch, Navigation usw. in meiner eigenen Datenschicht anwenden zu können. Idealerweise möchte ich alle Ausdrücke extrahieren können, die ich dann auf meine Query anwenden kann, indem ich diese als Parameter an die unteren Ebenen der Anwendung übergebe. Die Option, die ich bisher habe, besteht darin, die ODataQueryOptions zu übergeben, aber dies würde meine Geschäfts- und Datenschicht mit Daten verbinden, die ich nicht möchte. Haben Sie vielleicht ein Beispiel auf GitHub, das mir helfen könnte? – Manuel