Lambda Expressions und Linq

In einem letzten Artikel (Lambda Expressions) habe ich mich mit dem Zusammenhang zwischen Delegates und Lambda Expressions beschäftigt.
Das dort erlernte Wissen möchte ich heute mit einem Praxisbeispiel bei der Verwendung von Linq anwenden.

Zuerst mal: Was ist Linq?

Stark vereinfacht ausgedrückt ist Linq eine Klassenbibliothek, die uns Erweiterungs Methoden für das Interface IEnumerable und somit für alle Klassen, welche das Interface, implementieren (List<T>, Array, ObservableCollection<T>, usw…) bereitstellt. Damit werden Abfragen auf Collections in C# sehr einfach.
Linq steht für Language integrated query.

Es gibt vier verschiedene Linq Bibliotheken:
- Linq to Object (Arrays und Collections)
- Linq to DataSet (Abfragen auf DataTables in DataSets)
- Linq to XML (Abfragen auf XML Dokumente)
- Linq to SQL (Abfragen auf SQL-Server)

Der große Mehrwert von Linq liegt darn, dass man nicht zwischen den Bibliotheken unterscheiden muss und die Syntax bei allen vieren identisch ist.

Auch MSDN liefert viele Informationen zu Linq.

Was hat Linq jetzt mit Lambda Expressions zu tun?

Betrachten wir zuerst mal die Syntax einer der wichtigsten Methoden von Linq:

public static IEnumerable<TSource> Where<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, bool> predicate
)

Mit dem Wissen meiner bereits oben genannten Blogeinträge (Lambda Expressions und Erweiterungs Methoden) können wir diese Methode jetzt sehr leicht verstehen.

Erster Parameter: this IEnumerable<TSource> source
Wir sehen anhand des Schlüsselwort “this”, dass es sich um eine Erweiterungsmethode handelt, welche sich auf den Typ IEnumerable<T> bezieht.

Zweiter Parameter: Func<TSource, bool> predicate
Der zweite Parameter verrät uns, dass es sich um ein delegate handelt. Passen würde jede Methode, welche ein Objekt vom Typ TSource übernimmt und einen booleschen Wert zurückliefert.
TSource ist natürlich genau der Typ, von dem auch die abzufragende Collection ist.

string[] namen = new string[] { "Sepp", "Klaus", "Karina", "Magdalena", "Judith" };

IEnumerable<string> result = namen.Where(name => name.StartsWith("K"));

Wie man gut erkennen kann, kann hier für den Delegate-Parameter eine Lambda Expression übergeben werden.

Beispiele für weitere Linq-Abfragen: 101 Linq Samples

Kommentare sind geschlossen