- Language Integrated Query
-
LINQ (Abkürzung für Language INtegrated Query) ist eine Komponente von Microsofts .NET-Framework zur Abfrage von Datenquellen wie Datenbanken oder XML-Dateien. Besonderheit ist, dass 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.
Der Vorteil von LINQ besteht darin, dass der Code durch den Compiler auf Fehler geprüft und optimiert werden kann. Die Syntax von LINQ ist dabei an den Befehlen der SQL-Anfragesprache wie „select“, „from“ und „where“ angelehnt. Die Befehle werden jedoch nicht in SQL-Code umgewandelt, sondern sprechen, mit Hilfe der im .NET-Framework 3.5 eingeführten Erweiterungen, direkt .NET-Objekte an, welche die gewünschte Operation ausführen. Diese Objekte müssen die Schnittstelle IEnumerable implementieren.
Im Wesentlichen ist LINQ dabei auf die Manipulation von Syntaxbäumen ausgelegt. Die Fähigkeit von LINQ to XML und LINQ to SQL auf XML-Datensätze bzw. SQL-Datenbanken zugreifen zu können besteht darin, dass es sich dabei um Erweiterungen handelt, welche die Daten als Ausdrucksbäume abstrahieren, auf welche schließlich LINQ angewendet wird. Mit entsprechenden Erweiterungen (LINQ-Providern) ist es möglich, alle Arten von Datenquellen mittels LINQ abzufragen. Es existieren beispielsweise schon Projekte für LINQ to Google, LINQ to LDAP oder auch LINQ to Streams.
Das LINQ-Framework enthält zudem das Tool SQLMetal, welches die automatische Codegenerierung von Wrapper-Klassen für Microsoft SQL Server-Datenbanken in C# mit DLINQ ermöglicht, was Softwareentwicklern einen zusätzlichen Komfort bei der Applikationsentwicklung bietet.
Inhaltsverzeichnis
Standard Data Provider
- Speicherobjekte (LINQ to Objects)
- Wird verwendet, um Werte aus Collection-Objekten im Arbeitsspeicher abzufragen. Die Ergebnisse der Abfragen werden nicht dynamisch aktualisiert.
- SQL Server (LINQ to SQL)
- Dabei wird eine Linq-Abfrage zu einem SQL-Statement umgewandelt. Dieses Statement ist nur für MS SQL Server ausgelegt. Da SQL Server die Daten relational speichert und Linq mit Datenkapselung arbeitet, müssen die Objekte „gemappt“ werden.
- Data Sets (LINQ to Datasets)
- Da der SQL-Provider nur mit MS SQL Servern funktioniert, ist es möglich, mit diesem Provider Daten aus Data-Sets zu beziehen. Die Data-Sets können mittels ADO.net auch aus anderen Datenbanken gefüllt werden, wodurch es indirekt möglich ist, mittels Linq auf beliebige Datenbanksysteme zuzugreifen.
- XML-Dokumente (LINQ to XML)
- Hierbei wird ein XML Dokument zu einer „Collection“ von Elementen umgewandelt, auf die wieder Abfragen durchgeführt werden können.
Beispiel
In diesem Beispiel werden alle Produkte aufgelistet, deren Produktbezeichnung mit einem A beginnt. Die Produkte werden nach ihrer ID sortiert.
var query = from product in this.Products where product.Name.StartsWith("A") orderby product.ID select product; foreach ( var product in query ) { Console.WriteLine ( product.Name ); }
Alternativ können auch sogenannte Erweiterungsmethoden mit Lambda-Ausdrücken verwendet werden. In solche werden LINQ-Abfragen auch vom Compiler übersetzt.
var query = this.Products .Where(p => p.Name.StartsWith("A")) .OrderBy(p => p.ID); foreach ( var product in query ) { Console.WriteLine ( product.Name ); }
Literatur
- Özgür Aytekin: LINQ - Theorie und Praxis für Einsteiger. Addison-Wesley 2008, ISBN 978-3-8273-2616-4.
- Paolo Pialorsi, Marco Russo: Datenbankprogrammierung mit Microsoft LINQ. Microsoft Press Deutschland 2008, ISBN 978-3-86645-428-6.
Weblinks
- The LINQ Project Informationsseite von (Microsoft)
- Comega Ursprungsprojekt Microsoft Research
- Third-Party LINQ Providers Liste von Projekten die verschiedene LINQ-Provider implementieren
LINQ to XML
- LINQ to XML Einführung in LINQ to XML (dreiteilige Artikelserie)
LINQ to SQL
Wikimedia Foundation.