LINQ und ADO.NET

Unter den heutigen Bedingungen müssen viele Entwickler von Geschäftsanwendungen mit zwei (oder mehr) Programmiersprachen arbeiten: mit einer allgemeinen Programmiersprache für die Geschäftslogik- und die Darstellungsschicht (wie Visual C# oder Visual Basic) und einer Abfragesprache für die Interaktion mit der Datenbank (z. B. Transact-SQL).Der Entwickler muss also mehrerer Sprachen mächtig sein, um seine Arbeit effektiv erledigen zu können. Außerdem sind dadurch Sprachkonflikte in der Entwicklungsumgebung vorprogrammiert.So ergibt es sich z. B., dass eine Anwendung, die zur Ausführung einer Abfrage von Daten aus einer Datenbank eine Datenzugriffs-API verwendet, die Abfrage als Zeichenfolgenliteral angibt, indem sie Anführungszeichen verwendet.Diese Abfrage ist jedoch für den Compiler nicht lesbar und wird nicht auf Fehler (Syntaxfehler, tatsächliche Existenz der Spalten oder Zeilen, auf die verwiesen wird, usw.) geprüft.Auch der Typ der Abfrageparameter wird nicht geprüft, und es gibt keine IntelliSense-Unterstützung.

In Sprachintegrierte Abfrage (Language-Integrated Query, LINQ) können Entwickler in ihrem Anwendungscode mengenbasierte Abfragen unterbringen, ohne dazu auf eine separate Abfragesprache zurückgreifen zu müssen.Sie können LINQ-Abfragen für die verschiedensten aufzählbaren Datenquellen (also Datenquellen, die die IEnumerable-Schnittstelle implementieren) schreiben, wie Datenstrukturen, XML-Dokumente, SQL-Datenbanken und DataSet-Objekte im Arbeitsspeicher.Auch wenn diese aufzählbaren Datenquellen auf unterschiedliche Art und Weise implementiert sind, weisen sie doch alle dieselben Syntax- und Sprachkonstrukte auf.Da Abfragen direkt in der Programmiersprache formuliert werden können, benötigen Sie keine andere Abfragesprache, mit der Abfragen als Zeichenfolgenliterale eingebettet werden, die vom Compiler weder gelesen noch geprüft werden können.Durch die Integration von Abfragen in die Programmiersprache werden Visual Studio-Programmierer auch in die Lage versetzt, durch Typ- und Syntaxprüfungen während der Kompilierung sowie IntelliSense-Unterstützung produktiver zu arbeiten.Mit diesen Funktionen wird der für die Beseitigung von Abfragefehlern erforderliche Aufwand beträchtlich reduziert.

Das Übertragen von Daten aus SQL-Tabellen in Objekte im Arbeitsspeicher ist häufig nervenaufreibend und fehleranfällig.Der von LINQ to DataSet und LINQ to SQL implementierte LINQ-Anbieter konvertiert die Quelldaten in IEnumerable-basierte Objektauflistungen.Dem Programmierer werden die Daten stets als IEnumerable-Auflistung angezeigt, gleich ob bei einer Abfrage oder bei einem Update.Für das Schreiben von Abfragen für diese Auflistungen steht uneingeschränkte IntelliSense-Unterstützung zur Verfügung.

Es gibt drei separate ADO.NET-Sprachintegrierte Abfrage (Language-Integrated Query, LINQ)-Technologien: LINQ to DataSet, LINQ to SQL und LINQ to Entities.LINQ to DataSet ermöglicht umfangreichere, optimierte Abfragen der DataSet-Daten, mit LINQ to SQL können Sie SQL Server-Datenbankschemas direkt abfragen, und mit LINQ to Entities können Sie ein Entity Data Model abfragen.

Das folgende Diagramm ermöglicht eine Einordnung der ADO.NET LINQ-Technologien im Kontext von allgemeinen Programmiersprachen und anderen LINQ-fähigen Datenquellen.

Übersicht über LINQ to ADO.NET

Allgemeinere Informationen zu den LINQ-Sprachfunktionen finden Sie unter Einführung in LINQ.Informationen über die Verwendung von LINQ in Ihren Anwendungen finden Sie im LINQ Allgemein Programmierhandbuch. In diesem Handbuch finden Sie detaillierte Informationen über die Verwendung von LINQ-Technologien.

Die folgenden Abschnitte enthalten weitere Informationen zu LINQ to DataSet, LINQ to SQL und LINQ to Entities.

LINQ to DataSet

Das DataSet-Objekt ist ein wichtiges und weit verbreitetes Element des getrennten Programmiermodells, auf dem ADO.NET basiert.Mit LINQ to DataSet können Entwickler umfangreichere Abfragefunktionen in DataSet integrieren, indem Sie denselben Abfrageformulierungsmechanismus verwenden, der auch für viele andere Datenquellen zur Verfügung steht.Weitere Informationen dazu finden Sie unter LINQ to DataSet.

LINQ to SQL

LINQ to SQL ist ein nützliches Tool für Entwickler, die keine Zuordnung zu einem Konzeptmodell benötigen.Mit LINQ to SQL können Sie das LINQ-Programmiermodell direkt über das vorhandene Datenbankschema verwenden.LINQ to SQL ermöglicht es Entwicklern, .NET Framework-Klassen zu generieren, die Daten darstellen.Diese generierten Klassen werden nicht einem Konzeptdatenmodell zugeordnet, sondern die Zuordnung erfolgt direkt zu Datenbanktabellen, Ansichten, gespeicherten Prozeduren und benutzerdefinierten Funktionen.

LINQ to SQL ermöglicht es Entwicklern, Code direkt für das Speicherschema zu schreiben und dabei zusätzlich zu anderen Datenquellen, z. B. XML, dasselbe LINQ-Programmierungsmuster wie bei Auflistungen im Arbeitsspeicher und beim DataSet zu verwenden.Weitere Informationen dazu finden Sie unter LINQ to SQL.

LINQ to Entities

Die meisten aktuellen Anwendungen basieren auf relationalen Datenbanken.Daher müssen diese Anwendungen mit den relational abgebildeten Daten interagieren.Datenbankschemas sind nicht immer optimal für das Erstellen von Anwendungen geeignet, und die konzeptionellen Modelle von Anwendungen weichen von den logischen Modellen der Datenbanken ab.Das Entity Data Model stellt ein konzeptionelles Datenmodell dar, das für den Entwurf der Daten einer bestimmten Domäne verwendet werden kann, sodass Anwendungen mit den Daten als Entitäten bzw. Objekte interagieren können.Weitere Informationen finden Sie unter ADO.NET Entity Framework.

Durch das Entity Data Model werden relationale Daten als Objekte in der .NET-Umgebung verfügbar gemacht.Dadurch wird die Objektschicht zu einem optimalen Ziel für die LINQ-Unterstützung, die es Entwicklern ermöglicht, Abfragen an die Datenbank in der Sprache der Geschäftlogik zu formulieren.Dies wird als LINQ to Entities bezeichnet.Weitere Informationen finden Sie unter LINQ to Entities.

Siehe auch

Weitere Ressourcen

LINQ to DataSet

LINQ to SQL

LINQ to Entities

LINQ (Language-Integrated Query, sprachintegrierte Abfrage)