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 Typ
  • SR Rückgabetyp
  • ormType 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
}