Für die Ausführung von Formeln in .NET sollte immer die Compilation verwendet werden. Die Verwendung von Fit
und Evaluate
ist zwar technisch möglich aber aus Gründen der Performance nicht zu empfehlen.
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>(Type ormType, CriteriaOperator criteria, ICriteriaToExpressionConverter converter = null)
Methode zur Kompilierung gegen eine Datentabelle mit einem gewünschten Rückgabetyp
ST
ORM TypSR
RückgabetypormType
Datentabelle, auf deren Basis kompiliert wird.criteria
converter
Optionaler Converter- Rückgabe: Eine Exception oder eine ausführbare .Net Funktion.
Beispiel inkl. Kompilierung und Ausführung
try
{
string criteria = "Iif(StartsWith([TextField], 'Inhalt'), [TextField], 'Kein Inhalt da')";
Func<OrmBase, object> compiled = CriteriaOperatorHelper.CompileExpression<OrmBase, object>(typeof(OrmMyDataTable), criteria);
string text = compiled(myData)?.ToString();
}
catch (Exception ex) when (!ex.IsThreadAbort())
{
// Fehler Handling
}