Für die Ausführung von Formeln in .NET sollte immer die Kompilation verwendet werden. Die Verwendung von Fit
und Evaluate
wird nicht unterstützt, weil dort einige Funktionen nicht korrekt arbeiten.
Kompilierung einer Formel für die Ausführung in .Net:
Func<OrmBABase, bool> filter = CriteriaOperatorHelper.CompileExpression<OrmBABase, bool>(dataSourceGuid, criteriaString);
Dies interpretiert den Criteria-String als .NET Criteria und compiliert und validiert alle Ausdrücke so, dass sie für Objekte vom Typ dataSourceGuid immer funktionieren und den korrekten Rückgabetyp, hier bool
liefern.
Das Ergebnis der Compilation sollte immer gecacht werden, da selbige etwa 1000-fach langsamer ist, als die Ausführung.
Beschreibung
public static Func<ST, SR> CompileExpression<ST, SR>(Guid ormType, CriteriaOperator criteria, Action<LambdaExpression> check = null)
Methode zur Kompilierung gegen eine Datentabelle mit einem gewünschten Rückgabetyp
ST
Statischer Datensatztyp mit dem die Funktion aufgerufen wird, z.B.OrmBase
.SR
Statischer Rückgabetyp der Funktion, z.B.bool
bei Bedingungen oderobject
, wenn die Funktion beliebige Datentypen liefern darf.ormType
Datentabelle, auf deren Basis kompiliert wird. Das ist üblicherweise ein speziellerer Typ alsST
der sich erst aus dem Konfigurationskontext zur Laufzeit ergibt.criteria
Die Formelconverter
Optionaler Visitor der sich den LINQ-Ausführungsbaum nochmal ansehen kann, z.B. um den tatsächlichen Rückgabetyp der Formel zu prüfen.- Rückgabe: Eine Exception oder eine ausführbare .Net Funktion.