LINQ und ADO.NETLINQ and 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#Visual C# oder Visual BasicVisual Basic) und einer Abfragesprache für die Interaktion mit der Datenbank (z. B. Transact-SQLTransact-SQL).Today, many business developers must use two (or more) programming languages: a high-level language for the business logic and presentation layers (such as Visual C#Visual C# or Visual BasicVisual Basic), and a query language to interact with the database (such as Transact-SQLTransact-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.This requires the developer to be proficient in several languages to be effective, and also causes language mismatches in the development environment. 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.For example, an application that uses a data access API to execute a query against a database specifies the query as a string literal by using quotation marks. 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.This query string is un-readable to the compiler and is not checked for errors, such as invalid syntax or whether the columns or rows it references actually exist. Auch der Typ der Abfrageparameter wird nicht geprüft, und es gibt keine IntelliSense-Unterstützung.There is no type checking of the query parameters and no IntelliSense support, either.

In Language-Integrated Query (LINQ)Language-Integrated Query (LINQ) können Entwickler in ihrem Anwendungscode mengenbasierte Abfragen unterbringen, ohne dazu auf eine separate Abfragesprache zurückgreifen zu müssen.Language-Integrated Query (LINQ)Language-Integrated Query (LINQ) enables developers to form set-based queries in their application code, without having to use a separate query language. Sie können LINQLINQ-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.You can write LINQLINQ queries against various enumerable data sources (that is, a data source that implements the IEnumerable interface), such as in-memory data structures, XML documents, SQL databases, and DataSet objects. Auch wenn diese aufzählbaren Datenquellen auf unterschiedliche Art und Weise implementiert sind, weisen sie doch alle dieselben Syntax- und Sprachkonstrukte auf.Although these enumerable data sources are implemented in various ways, they all expose the same syntax and language constructs. 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.Because queries can be formed in the programming language itself, you do not have to use another query language that is embedded as string literals that cannot be understood or verified by the compiler. Durch die Integration von Abfragen in die Programmiersprache werden Visual StudioVisual Studio-Programmierer auch in die Lage versetzt, durch Typ- und Syntaxprüfungen während der Kompilierung sowie IntelliSense-Unterstützung produktiver zu arbeiten.Integrating queries into the programming language also enables Visual StudioVisual Studio programmers to be more productive by providing compile-time type and syntax checking, and IntelliSense. Mit diesen Funktionen wird der für die Beseitigung von Abfragefehlern erforderliche Aufwand beträchtlich reduziert.These features reduce the need for query debugging and error fixing.

Das Übertragen von Daten aus SQL-Tabellen in Objekte im Arbeitsspeicher ist häufig nervenaufreibend und fehleranfällig.Transferring data from SQL tables into objects in memory is often tedious and error-prone. Der von LINQLINQ und LINQ to DataSetLINQ to DataSet implementierte LINQ to SQLLINQ to SQL-Anbieter konvertiert die Quelldaten in IEnumerable-basierte Objektauflistungen.The LINQLINQ provider implemented by LINQ to DataSetLINQ to DataSet and LINQ to SQLLINQ to SQL converts the source data into IEnumerable-based object collections. Dem Programmierer werden die Daten stets als IEnumerable-Auflistung angezeigt, gleich ob bei einer Abfrage oder bei einem Update.The programmer always views the data as an IEnumerable collection, both when you query and when you update. Für das Schreiben von Abfragen für diese Auflistungen steht uneingeschränkte IntelliSense-Unterstützung zur Verfügung.Full IntelliSense support is provided for writing queries against those collections.

Es gibt drei separate ADO.NET-Language-Integrated Query (LINQ)Language-Integrated Query (LINQ)-Technologien: LINQ to DataSetLINQ to DataSet, LINQ to SQLLINQ to SQL und LINQ to EntitiesLINQ to Entities.There are three separate ADO.NET Language-Integrated Query (LINQ)Language-Integrated Query (LINQ) technologies: LINQ to DataSetLINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to EntitiesLINQ to Entities. LINQ to DataSetLINQ to DataSet ermöglicht umfangreichere, optimierte Abfragen der DataSet-Daten, mit LINQ to SQLLINQ to SQL können Sie SQL ServerSQL Server-Datenbankschemas direkt abfragen, und mit LINQ to EntitiesLINQ to Entities können Sie ein Entity Data ModelEntity Data Model abfragen. provides richer, optimized querying over the DataSet and LINQ to SQLLINQ to SQL enables you to directly query SQL ServerSQL Server database schemas, and LINQ to EntitiesLINQ to Entities allows you to query an Entity Data ModelEntity Data Model.

Das folgende Diagramm ermöglicht eine Einordnung der ADO.NET LINQ-Technologien im Kontext von allgemeinen Programmiersprachen und anderen LINQ-fähigen Datenquellen.The following diagram provides an overview of how the ADO.NET LINQ technologies relate to high-level programming languages and LINQ-enabled data sources.

LINQ to ADO.NET ÜbersichtLINQ to ADO.NET overview

Allgemeine Informationen zu LINQ-Sprachfunktionen, finden Sie unter Einführung in LINQ.For general information on the LINQ language features, see Introduction to LINQ. Informationen zur Verwendung von LINQ in Ihren Anwendungen finden Sie unter der nicht im BUILD: LINQ Allgemein Programmierhandbuch, die enthält detaillierte Informationen zur Verwendung von LINQ-Technologien.For information about using LINQ in your applications, see the NOT IN BUILD: LINQ General Programming Guide, which contains detailed information about how to use LINQ technologies.

Die folgenden Abschnitte enthalten weitere Informationen zu LINQ to DataSetLINQ to DataSet, LINQ to SQLLINQ to SQL und LINQ to EntitiesLINQ to Entities.The following sections provide more information about LINQ to DataSetLINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to EntitiesLINQ to Entities.

LINQ to DataSetLINQ to DataSet

Das DataSet-Objekt ist ein wichtiges und weit verbreitetes Element des getrennten Programmiermodells, auf dem ADO.NETADO.NET basiert.The DataSet is a key element of the disconnected programming model that ADO.NETADO.NET is built on, and is widely used. Mit LINQ to DataSetLINQ 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.LINQ to DataSetLINQ to DataSet enables developers to build richer query capabilities into DataSet by using the same query formulation mechanism that is available for many other data sources. Weitere Informationen finden Sie unter LINQ to DataSet.For more information, see LINQ to DataSet.

LINQ to SQLLINQ to SQL

LINQ to SQLLINQ to SQL ist ein nützliches Tool für Entwickler, die keine Zuordnung zu einem Konzeptmodell benötigen. is a useful tool for developers who do not require mapping to a conceptual model. Mit LINQ to SQLLINQ to SQL können Sie das LINQLINQ-Programmiermodell direkt über das vorhandene Datenbankschema verwenden.By using LINQ to SQLLINQ to SQL, you can use the LINQLINQ programming model directly over existing database schema. LINQ to SQLLINQ to SQL ermöglicht es Entwicklern, .NET Framework.NET Framework-Klassen zu generieren, die Daten darstellen. enables developers to generate .NET Framework.NET Framework classes that represent data. Diese generierten Klassen werden nicht einem Konzeptdatenmodell zugeordnet, sondern die Zuordnung erfolgt direkt zu Datenbanktabellen, Ansichten, gespeicherten Prozeduren und benutzerdefinierten Funktionen.Rather than mapping to a conceptual data model, these generated classes map directly to database tables, views, stored procedures, and user-defined functions.

LINQ to SQLLINQ 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 LINQLINQ-Programmierungsmuster wie bei Auflistungen im Arbeitsspeicher und beim DataSet zu verwenden.With LINQ to SQLLINQ to SQL, developers can write code directly against the storage schema using the same LINQLINQ programming pattern as in-memory collections and the DataSet, in addition to other data sources such as XML. Weitere Informationen finden Sie unter LINQ to SQL.For more information, see LINQ to SQL.

LINQ to EntitiesLINQ to Entities

Die meisten aktuellen Anwendungen basieren auf relationalen Datenbanken.Most applications are currently written on top of relational databases. Daher müssen diese Anwendungen mit den relational abgebildeten Daten interagieren.At some point, these applications will need to interact with the data represented in a relational form. 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.Database schemas are not always ideal for building applications, and the conceptual models of application are not the same as the logical models of databases. Das Entity Data ModelEntity 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.The Entity Data ModelEntity Data Model is a conceptual data model that can be used to model the data of a particular domain so that applications can interact with data as objects. Finden Sie unter ADO.NET Entity Framework für Weitere Informationen.See ADO.NET Entity Framework for more information.

Durch das Entity Data ModelEntity Data Model werden relationale Daten als Objekte in der .NET-Umgebung verfügbar gemacht.Through the Entity Data ModelEntity Data Model, relational data is exposed as objects in the .NET environment. Dadurch wird die Objektebene zu einem optimalen Ziel für die LINQLINQ-Unterstützung, die es Entwicklern ermöglicht, Abfragen an die Datenbank in der Sprache der Geschäftlogik zu formulieren.This makes the object layer an ideal target for LINQLINQ support, allowing developers to formulate queries against the database from the language used to build the business logic. Dies wird als LINQ to EntitiesLINQ to Entities bezeichnet.This capability is known as LINQ to EntitiesLINQ to Entities. Weitere Informationen Sie unter LINQ to Entities.See LINQ to Entities for more information.

Siehe auchSee Also

LINQ to DataSetLINQ to DataSet
LINQ to SQLLINQ to SQL
LINQ to EntitiesLINQ to Entities
LINQ (Language Integrated Query)LINQ (Language-Integrated Query)
ADO.NET Managed Provider und DataSet Developer CenterADO.NET Managed Providers and DataSet Developer Center