Eine der großartigen Neuerungen im Sprachumfang von C# bzw. .NET 3.5 sind Lambda und LINQ.
Lambda erinnert mich einerseits an DEFINES von Ansi C, und andererseits an die sog. “Functors” von C++ und wurden hier vermutlich auch abgeguckt. Dennoch wurde Lambda integrativer gelöst, da ein Lambda-Ausdruck direkt innerhalb des Codes erfolgen kann, wo er benötigt wird. C++ – Functors wurden bzw werden i.d.R. als separate Klassenrümpfe mit einem überladenen operator() definiert.
Ein Lamda-Ausdruck sieht zum Beispiel so aus:
Func<int , int> sqr = x => x * x; Console.WriteLine(sqr(10)); // Result: 100 </int> |
LINQ (Abkürzung für Language INtegrated Query) ist eine Komponente von Microsofts .NET-Framework, mit der SQL-, XLink- und XQuery-Anfragen direkt in .NET-Programmiersprachen wie C# 3.0 oder VB.Net 9.0 als Code statt als String eingebunden werden können. LINQ wurde federführend von Turbo-Pascal- und C#-Autor Anders Hejlsberg entwickelt.
LINQ erweitert C# u.a. um direkte Selektion von Datenmengen innerhalb des Codes. Es wird keine Query in String-Form abgesetzt, sondern unmittelbar in dem Code integriert.
Am besten erklärt sich LINQ ein einem kleinen, konkreten Beispiel:
string[] names = { "Faust", "Peter", "Tom", "Fred", "August" }; var foundNamesAsQuery = from s in names where s[0] == 'F' select s; foreach (string name in foundNamesAsQuery) Console.WriteLine(name); // Result: Faust, Fred |
Wenn LINQ schon in einer SQL-Syntax Datenmengen selektieren und filtern kann, unterstützt es dann auch Sortierungen à la “ORDER BY”? Mal gucken:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace linqtest { class Program { static void Main(string[] args) { string[] names = { "Faust", "Peter", "Tom", "Fred", "August" }; var foundNamesAsQuery = from s in names where s[0] == 'F' orderby s descending select s; foreach (string name in foundNamesAsQuery) Console.WriteLine(name); Console.ReadLine(); } } } |

