Kamran Saeedi 14.04.2020, 12:17 Uhr

CSharp-Lambda-Ausdrücke übersetzen

Die Idee: C#-Lambda-Ausdrücke in Klassen übersetzen und die Daten kapseln, die zum Filtern von Daten und zum Erstellen von Abfragezeichenfolgen geeignet sind.
(Quelle: Kamran Saeedi, codeproject.com/Articles/5260863/Translating-Csharp-Lambda-Expressions-to-General-P )
C#-Lambda-Ausdrücke bieten eine bequeme und prägnante Möglichkeit, eine Bedingung für die Filterung fast aller Arten von Daten in einem C#-Programm zu beschreiben. Die Konvertierung eines bestimmten Lambda-Ausdrucks in andere Formen, die in anderen Domänen verwendet werden, wie beispielsweise eine HTTP-Anforderung, kann jedoch mühsam und trickreich sein. Der Artikel von Kamran Saeedi will eine Lösung für dieses Problem mit der ExpressionVisitor-Klasse des .NET-Frameworks aufzeigen.
Es ist relativ üblich, einen Mechanismus zur Konvertierung von in Code ausgedrückten Geschäftsbedingungen in ein Format aufzubauen, das von anderen Ebenen einer Lösung, sei es eine Datenbank oder ein Webdienst, verwendet werden kann, insbesondere in den Infrastrukturebenen einer Lösung. Zwei Beispiel-Szenarien: Angenommen, Sie wollen Filterbedingungen aus einem C#-Client an einen HTTP-Dienst übergeben. Diese Bedingungen können in einer Query-String-Sammlung gesendet werden, aber das manuelle Konstruieren von Query-Strings durch String-Verkettung erscheint nicht nur nicht schön und sauber, sondern wäre höchstwahrscheinlich auch schwer zu debuggen und zu warten.
Es kann vorkommen, dass Sie Filterbedingungen in SQL-WHERE-Klauseln übersetzen möchten, ohne ein ORM-Tool zu verwenden. Auch hier scheint die Konstruktion von SQL-WHERE-Klauseln für Datenbankabfragen durch manuelle String-Manipulation fehleranfällig und schwer zu warten zu sein.
Als elegantes Werkzeug bieten Lambda-Ausdrücke ein prägnantes und bequemes Mittel zur Beschreibung von Filterbedingungen, aber die Arbeit mit diesen Ausdrücken ist nicht sehr einfach. Glücklicherweise ist die ExpressionVisitor-Klasse im Namensraum System.Linq.Expressions ein ausgezeichnetes Werkzeug zum Inspizieren, Modifizieren und Übersetzen von Lambda-Ausdrücken. Der Artikel von Kamran Saeedi auf CodeProject verwendet die Klasse ExpressionVisitor, um eine Lösung für das erste der oben genannten Szenarien vorzuschlagen.


Das könnte Sie auch interessieren