Die Begeisterung für die .NET-Komponente LINQ lässt sich kaum noch ignorieren. Das gilt vor allem, seit es Microsoft in der .NET-Plattform und in Visual Studio 2008 integriert hat. ZDNet zeigt die besten Eigenschaften dieser Datenbank-Technologie.
LINQ[1] (Language-Integrated-Query) ermöglicht den Zugriff auf Daten mithilfe einer beliebigen Programmiersprache, ohne dabei auf SQL zurückgreifen zu müssen. Im Rahmen der .NET-Plattform ist LINQ[2] ein Erweiterungspaket des .NET-Framework. Es ermöglicht das Abfragen von .NET-Objektmengen, relationalen Datenbanken, Data-Sets und XML-Daten. LINQ ist seit dem .NET-Framework 3.5 in der Sprachsyntax von C# 3.0 und Visual Basic 9.0 verankert.
Der zentrale Begriff, der in der Bezeichnung LINQ steckt, lautet Integration. Dieser Terminus weist darauf hin, dass Entwickler via LINQ in der Lage sind, in ihrer eigenen Programmiersprache mit verschiedensten Datenquellen zu kommunizieren. Diese Integration macht eine detaillierte Kenntnis von SQL entbehrlich. Der Entwickler kann also bei der Arbeit mit Back-End-Daten weiterhin seine bevorzugte Programmiersprache verwenden.
LINQ funktioniert mit jeder Back-End-Datenquelle. Entwickler können so von den zahlreichen Funktionen ihrer IDE, etwa Visual Studio 2008[3], profitieren. Während der Übersetzung führt der Compiler eine Überprüfung der Syntax und eine statische Typisierung durch. Diese Funktionen stehen bei der Arbeit mit externen Tools wie SQL Server Enterprise Manager leider nicht zur Verfügung.
Microsoft unterteilt LINQ in drei Bereiche:
- LINQ to Object wird verwendet, um gespeicherte Daten abzufragen und zu bearbeiten.
- LINQ to ADO.NET beinhaltet drei Varianten: LINQ to SQL liefert bei der Arbeit mit relationalen Daten unter ausschließlicher SQL-Server-Unterstützung einen Objekt-relationalen Mapper (ORM); LINQ to DataSet ermöglicht die Arbeit mit ADO.NET-Datensätzen; LINQ to Entities stellt eine Microsoft-ORM-Lösung dar.
- Mit LINQ to XML lassen sich XML-Datensätze anfragen und modifizieren.
Diese drei Funktionsbereiche von LINQ werden über zahlreiche .NET-Klassenbibliotheken bereitgestellt.
LINQ stellt seine Funktionen über eigene Klassen bereit. Der wichtigste LINQ-Namensraum ist System.Linq. Er verfügt über Klassen und Schnittstellen, die LINQ-Anfragen unterstützen. Außerdem gibt es noch folgende Namensräume:
- System.Linq.Expressions enthält Klassen, Schnittstellen und Aufzählungen, die eine Darstellung sprachlicher Code-Ausdrücke als Objekte in Form von Ausdrucksbäumen ermöglichen.
- System.Data.Linq besteht aus Klassen, die die Interaktion mit relationalen Datenbanken in LINQ to SQL-Anwendungen unterstützen.
- System.Data.Linq.Mapping läuft über den Namensraum System.Data.Linq, um mit relationalen Datenbanksystemen zusammenzuarbeiten. Damit lässt sich ein Objektmodell erstellen, das die Struktur und den Inhalt der Datenquelle abbildet.
- System.Data.Linq.SqlClient umfasst Anbieterklassen für die Kommunikation mit SQL-Server und Klassen mit Abfragehilfsmethoden. Dieser Namensraum ist nicht für eine direkte Verwendung im Code bestimmt.
- System.Xml.Linq enthält Klassen für das Arbeiten mit XML-Datenquellen (LINQ to XML). Mithilfe dieser Klassen können beispielsweise XML-Daten von Dateien oder Streams geladen oder XML-Bäume abgefragt, validiert und manipuliert werden. LINQ to XML ist eine XML-Programmierschnittstelle im Arbeitsspeicher, mit der XML-Dokumente effizient und einfach modifiziert werden können.
Eine der wichtigsten Eigenschaften von LINQ besteht darin, dass eine komplette Abfrage jeder Sammlung möglich ist, die IEnumerable oder IQueryable implementiert. Damit LINQ auch Objekte im Arbeitsspeicher berücksichtigt, sollte der Objekttyp IEnumerable implementieren. Für LINQ to XML und LINQ to ADO.NET gilt, dass der zugrunde liegende Anbieter die Zielobjekte zu Sammlungen auf der Grundlage von IEnumerable konvertiert. Da LINQ mit sämtlichen Sammlungen zusammenarbeitet, die die Schnittstelle IEnumerable implementieren, ist die Einstiegsschwelle sehr niedrig. Denn fast alle Container des Typs .NET unterstützen IEnumerable. Das folgende C#-Beispiel zeigt die Verwendung von LINQ mit einem Array an Stringwerten. Es wird ein IEnumerable-String verwendet, um sämtliche Wortwerte im Stringarray zu durchlaufen.
Das Arbeiten mit Stringdaten ist zwar gut, aber die Interaktion mit SQL Server wird sicherlich häufiger vorkommen. Visual Studio 2008 beinhaltet ein Entwickler-Tool, mit dem sich eine Datenbank einfach als LINQ-to-SQL-Datenmodell formen und sichtbar machen lässt. Die Elemente der Datenbank können per Drag and drop in die Entwicklungsumgebung eingefügt werden. Daraus resultiert eine dbml-Datei. Diese Datei erstellt dann die Klassendatei für Bearbeitungsvorgänge wie Erstellen (Create), Lesen (Read), Aktualisieren (Update) und Löschen (Delete).
Sobald mehrere Datenbank-Features in das Designer-Tool kopiert sind, bekommt die dbml-Datei einen Namen zugewiesen. Dieser Name wird für die Kommunikation mit der zugrunde liegenden Datenquelle verwendet. Als Beispiel dient hier eine Verbindung zum Mitarbeiterverzeichnis der Beispieldatenbank Northwind von SQL Server. Der folgende C#-Code greift auf die Datenquelle zu:
Es folgt der entsprechende Code in Visual Basic:
Mit LINQPad lernen
Manche Menschen neigen bei neuen Technologien dazu, sich sofort kopfüber hineinzustürzen und loszulegen. Mit LINQ fällt das auch wirklich leicht: einfach Visual Studio 2008 starten und ein neues Projekt erstellen, das sich unter LINQ mit einer Datenquelle verbindet. Das Gratis-Tool LINQPad bietet eine leicht zu bedienende Schnittstelle für das Arbeiten mit LINQ-Funktionen.
LINQPad[4] steht als kostenloser Download zur Verfügung. Man braucht nur die ausführbare Datei herunterladen, und schon ist es einsatzfähig. Das Tool enthält zahlreiche Code-Beispiele. Es gibt dem Benutzer die Möglichkeit, problemlos mit LINQ zu arbeiten, Verbindungen zu erstellen und mit der Datenquelle zu kommunizieren. Die Daten lassen sich problemlos per Drag and drop in ein Quellfenster einfügen, oder man gibt direkt Code ein.
LINQ erleichtert die Entwicklungsarbeit
Microsoft verspricht immer wieder, einige Prozesse in den Entwicklungsplattformen und Tools effektiver zu gestalten und so die Anwendungsentwickler zu entlasten. Mit LINQ ist der Datenzugriff tatsächlich einfacher. Entwickler haben nun die Möglichkeit, unter Verwendung ihrer bevorzugten Programmiersprache mit Back-End-Datenquellen zu interagieren, und sind somit nicht mehr auf SQL angewiesen.
Wer hat bereits Erfahrungen mit LINQ im .NET Framework gemacht? Ist es von Vorteil, dass Entwickler nun nicht mehr auf das Erlernen und den Gebrauch von SQL angewiesen sind? Teilen Sie Ihre Gedanken und Erfahrungen im Forum[5] mit!
URLs in diesem Artikel:
[1] = http:/
[2] = http:/
[3] = http:/
[4] = http:/
[5] = http:/