2007-07-08

Lambda Expressions und Query Expressions

Lambda Expressions
Die Lambda Expressions sind eine abgekürzte Schreibweise und Weiterentwicklung von Anonymuen Methoden. Der Unterschied gegenüber den anonymen Methoden ist, dass der Body entweder eine Expression oder ein Statement-Block sein kann.

Bei den anonymen Methoden kann der Body nur ein Statement-Block sein.

(int i) => i + 1; // nur eine Anweisung

oder:

(int x) => { if( x < x =" -1">

Die Programmiersprache C# hat mit der Version 3.0 die Lambda-Expressions implementiert. Dieser Implementierung ermöglicht auch die funktionale Programmierung mit C# und gleichzeitig ermöglicht uns auch SQL Abfrage ähnliche Ausdrücke zu implementieren.

Mit diesen Ausdrücken können bestimmte Werte aus einem oder mehreren Elementen, die das Interface IEnumerable implementieren, ermittelt werden.

Mit der Verwendung von Lambda Expressions wird es möglich, die Eingabeparameter und als auch die eigentliche Methode und deren Rückgabewert in einer einzelnen Zeile zu definieren.

s => s.Length <>

Die Datenrepräsentation von Lambda Expressions wird Expression Trees genannt. Bei den Expression Trees handelt es sich um die In-Memory-Repräsentation von Lambda Expression Ergebnissen. Eine Lambda Expression kann mit Hilfe von einer Baum Struktur abgebildet werden. Diese Strukturen werden auch als Abstract Syntax Tree genannt.

Als Entwickler von Datenbankapplikationen benötigen Sie T-SQL Kenntnisse, wenn Sie auf die Daten zugreifen möchten. Die Datenabfragen sind mit SQL nicht immer einfach und es ist gut möglich, dass der T-SQL Code schnell unübersichtlich wird. Mit Lambda Expressions können Sie Ihre Abfragen auf die Daten auch implementieren. Und dabei bleibt Ihr Code weiterhin übersichtlich.

In dem folgenden Beispiel wird eine SQL Abfrage in das Lambda Expressions übersetzt. Die erste Abfrage hat die ähnliche Syntax wie T-SQL. In dieser Abfrage werden Produkte mit der schwarzen Farbe selektiert.

AdventureWorksDataContext db = new AdventureWorksDataContext();
var query = from p in db.Products
where p.Color == "Black"
select p;

Die folgende Abfrage benutzt den Lambda Expression für die Einschränkung der Produkte. Der Syntax sieht beim ersten Augenblick gewöhnungsbedürftig aus, aber wenn Sie die zwei Abfragen vergleichen, sehen Sie, dass die untenstehende Abfrage übersichtlicher und vor allem kompakter ist.

var queryLambda = db.Products.Where(p => p.Color == "Black");

Query-Expressions
Die C# 3.0 nimmt mit dem Lambda-Expression sein Kurs Richtung in die Welt der funktionalen Programmierung. Diese Erweiterung ermöglicht uns, das SQL-Abfrage-Ausdrücke (ähnliche) zu implementieren. Mit diesen Ausdrücken können bestimmte Werte aus einem oder mehreren Elementen, die das Interface IEnumerable implementieren, ermittelt werden.

Eine Query-Expression sieht ähnlich wie ein SQL-Statement aus. Beim ersten Blick fällt aber auf, dass die Query-Expression mit from-Klausel beginnt und mit where Klausel folgt. Die Endung einer Query-Expression ist ein select- oder groupby-Klausel.

No comments: