LINQ und ADO.NETLINQ and ADO.NET

Heutzutage müssen viele Entwickler von Unternehmen zwei (oder mehr) Programmiersprachen verwenden: eine Sprache auf hoher Ebene für die Geschäftslogik und Präsentations Schichten (z. C# b. Visual oder Visual Basic) und eine Abfragesprache für die Interaktion mit der Datenbank (z. b. Transact-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# or Visual Basic), and a query language to interact with the database (such as 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.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 können Visual Studio-Programmierer auch produktiver arbeiten, indem Sie die Typ-und Syntax Überprüfung IntelliSensefür die Kompilierzeit bereitstellen, und.Integrating queries into the programming language also enables Visual 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 LINQLINQ von implementierte Anbieter LINQ to DataSet LINQ to SQLLINQ to SQL und konvertiert die Quelldaten IEnumerablein-basierte Objekt Auflistungen.The LINQLINQ provider implemented by LINQ 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 Language-Integrated Query (LINQ)Language-Integrated Query (LINQ)-Technologien für ADO.NET: LINQ to DataSet, LINQ to SQLLINQ to SQL und LINQ to Entities.There are three separate ADO.NET Language-Integrated Query (LINQ)Language-Integrated Query (LINQ) technologies: LINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to Entities. LINQ to DataSet bietet umfangreichere, optimierte Abfragen für die DataSet und LINQ to SQLLINQ to SQL ermöglicht es Ihnen, SQL Server Datenbankschemas direkt abzufragen, und LINQ to Entities ermöglicht es Ihnen, eine Entity Data Model abzufragen.LINQ to DataSet provides richer, optimized querying over the DataSet and LINQ to SQLLINQ to SQL enables you to directly query SQL Server database schemas, and LINQ to Entities allows you to query an Entity 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.

Übersicht über LINQ to ADO.netLINQ to ADO.NET overview

Weitere Informationen zu LINQ finden Sie unter Language Integrated Query (LINQ).For more information about LINQ, see Language Integrated Query (LINQ).

In den folgenden Abschnitten finden Sie weitere Informationen zu LINQ to SQLLINQ to SQLLINQ to DataSet, und LINQ to Entities.The following sections provide more information about LINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to Entities.

LINQ to DataSetLINQ to DataSet

DataSet Ist ein Schlüsselelement des getrennten Programmiermodells, auf dem ADO.NET basiert, und wird häufig verwendet.The DataSet is a key element of the disconnected programming model that ADO.NET is built on, and is widely used. LINQ to DataSet ermöglicht es Entwicklern, umfangreichere Abfragefunktionen DataSet in zu erstellen, indem Sie denselben Abfrage Formulierungs Mechanismus verwenden, der auch für viele andere Datenquellen verfügbar ist.LINQ 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 SQLermöglicht es Entwicklern, .NET Framework Klassen zu generieren, die Daten darstellen.enables developers to generate .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. Der Entity Data Model ist ein konzeptionelles Datenmodell, das verwendet werden kann, um die Daten einer bestimmten Domäne zu modellieren, sodass Anwendungen mit Daten als Objekte interagieren können.The Entity 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. Weitere Informationen finden Sie unter ADO.NET Entity Framework .See ADO.NET Entity Framework for more information.

Durch das Entity Data Model werden relationale Daten als Objekte in der .NET-Umgebung verfügbar gemacht.Through the Entity 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 auch als LINQ to Entities bezeichnet.This capability is known as LINQ to Entities. Weitere Informationen Sie unter LINQ to Entities.See LINQ to Entities for more information.

Siehe auchSee also