8 LINQ
LINQ (Language Integrated Query) ist eine Sprachergänzung von .NET, die mit dem .NET Framework und dem Visual Studio 2008 eingeführt worden ist. LINQ ermöglicht es, über ein neues Abstraktionsmodell Daten abzufragen. Dabei spielt es keine Rolle, welcher Natur die Daten sind: Es kann sich um ein XML-Dokument handeln oder um eine Datenbanktabelle, um eine Excel-Tabelle oder auch um eine Auflistung von herkömmlichen Objekten. Diese Liste könnte beliebig fortgesetzt werden.
8.1 Was ist LINQ? 

Stellen Sie sich LINQ als eine Erweiterung vor, die dazu dient, den Zugriff auf Daten zu vereinheitlichen und auch zu vereinfachen. Wegen der unterschiedlichen Datenquellen wurden mehrere LINQ-Implementationen entwickelt, die als Bestandteil des .NET Frameworks als Provider bereitgestellt werden:
- LINQ to Objects wird durch den Namespace System.Linq zur Verfügung gestellt und bildet das Fundament aller LINQ-Abfragen. Mit LINQ to Objects lassen sich Auflistungen und Objekte manipulieren, die untereinander in Beziehung gesetzt werden können. Dabei beschränkt sich der Einsatz nicht nur auf benutzerdefinierte Daten.
- LINQ to XML bietet eine Programmierschnittstelle für XML im Arbeitsspeicher, die das in .NET sprachintegrierte Abfrage-Framework nutzt.
- LINQ to SQL ist Microsofts LINQ-Provider für das hauseigene Datenbanksystem SQL Server 2005 und demnächst auch für SQL Server 2008.
- LINQ to ADO.NET besteht aus zwei separaten Technologien: LINQ to DataSet und LINQ to SQL. LINQ to DataSet ermöglicht umfangreichere, optimierte Abfragen der Daten aus einem DataSet, und mit LINQ to SQL können Sie SQL Server-Datenbankschemas direkt abfragen.
Jeder dieser Provider verfügt über eigene Klassen, um den spezifischen Bedürfnissen der entsprechenden Datenquelle zu entsprechen. Da LINQ eine offene Architektur ist, kann man davon ausgehen, dass das .NET Framework in Zukunft um weitere Provider ergänzt werden wird.
In diesem Kapitel werden wir uns ausschließlich LINQ to Objects widmen.
Im Folgenden möchte ich Ihnen eine typische LINQ-Abfrage vorstellen, damit Sie einen ungefähren Begriff davon bekommen, was Sie in diesem Kapitel erwartet.
var pers = from p in personen
where p.Alter > 30
select new { p.Name, p.Alter };Gleichwertig ist auch die folgende Formulierung:
var pers = personen
.Where( p => p.Alter > 30 )
.Select( p => new {p.Name, p.Alter });Diese Abfrage ruft aus einer Liste die Personen ab, die älter als 30 Jahre sind, und gibt in der Ergebnisliste den Namen und das Alter der gefundenen Personen an. Es spielt keine Rolle, woher die Daten in der Liste personen stammen: Es könnte sich um ein Array von Personen-Objekten handeln oder um ein ADO.NET-DataSet (davon erfahren Sie mehr weiter hinten im Buch). Die Abfragesyntax ist in jedem Fall datenquellenneutral.
Die von LINQ verwendete Syntax wird als Abfrageausdruck bezeichnet. Wir werden hier nicht näher auf den Programmcode eingehen, aber Sie werden feststellen, dass LINQ sich in der Ausdrucksweise anscheinend stark an SQL orientiert. Das ist keine falsche Annahme. Darüber hinaus werden Sie aber auch bemerken, dass die Syntax überhaupt nicht in das Ihnen bisher bekannte Sprachkonzept von Visual C# passt.
Die Einführung von LINQ zwang das .NET-Entwicklerteam dazu, die .NET-Sprachen zu ergänzen. Dazu gehören Lambda-Ausdrücke, Typinferenz, Objektinitialisierer, anonyme Typen und Erweiterungsmethoden. Bevor wir mit LINQ starten, müssen wir diese Themen behandeln.




Jetzt bestellen





