LINQ et ADO.NET

Mise à jour : November 2007

Aujourd'hui, de nombreux développeurs d'entreprise doivent utiliser au moins deux langages de programmation : un langage de haut niveau pour la logique métier et les couches de présentation (tel que Visual C# ou Visual Basic), et un langage de requête pour interagir avec la base de données (comme Transact-SQL). Pour être efficace, le développeur doit être expert en plusieurs langages, et cela peut entraîner des incompatibilités dans l'environnement de développement. Par exemple, une application qui utilise une API d'accès aux données pour exécuter une requête sur une base de données spécifie la requête comme un littéral de chaîne en utilisant des guillemets. Cette chaîne de requête est illisible pour le compilateur et elle ne fait l'objet d'aucun contrôle d'erreur pour vérifier sa syntaxe ou l'existence des colonnes ou lignes auxquelles elle fait référence. Il n'y a aucune vérification de type des paramètres de requête et aucune prise en charge IntelliSense.

LINQ (Language Integrated Query) permet aux développeurs de former des requêtes basées sur des ensembles dans leur code d'application, sans avoir à utiliser un langage de requête séparé. Vous pouvez écrire des requêtes LINQ sur diverses sources de données énumérables (c'est-à-dire une source de données qui implémente l'interface IEnumerable), comme des structures de données en mémoire, des documents XML, des bases de données SQL et des objets DataSet. Bien que ces sources de données énumérables soient implémentées de diverses manières, elles exposent toutes la même syntaxe et les mêmes constructions de langage. Parce que les requêtes peuvent être formées à même le langage de programmation, vous n'avez pas à utiliser un autre langage de requêtes intégré en tant que littéraux de chaîne et qui ne peut pas être compris ou vérifié par le compilateur. L'intégration des requêtes dans le langage de programmation permet également aux programmeurs Visual Studio d'être plus productifs en leur fournissant la vérification de type et de syntaxe au moment de la compilation et la prise en charge IntelliSense. Ces fonctionnalités réduisent la nécessité du débogage de requête et de la résolution d'erreur.

Il existe trois technologies ADO.NET LINQ (Language Integrated Query) différentes : LINQ to DataSet, LINQ to SQL et LINQ to Entities. LINQ to DataSet assure une interrogation plus riche et optimisée du DataSet, LINQ to SQL vous permet d'interroger directement des schémas de base de données SQL Server et LINQ to Entities vous permet d'interroger un Entity Data Model.

Le transfert des données à partir des tables SQL dans des objets en mémoire est souvent fastidieux et susceptible d'engendrer des erreurs. Le fournisseur LINQ implémenté par LINQ to DataSet et LINQ to SQL convertit les données sources en collections d'objets basées sur IEnumerable. Le programmeur consulte toujours les données comme une collection IEnumerable, lors de l'interrogation et de la mise à jour. La prise en charge complète de IntelliSense est fournie pour l'écriture de requêtes sur ces collections.

Le diagramme suivant donne un aperçu de la relation des technologies ADO.NET LINQ avec les langages de programmation de haut niveau et les sources de données prenant en charge LINQ.

Vue d'ensemble de LINQ to ADO.NET

Les sections ci-dessous fournissent des informations supplémentaires sur LINQ to DataSet, LINQ to SQL et LINQ to Entities.

LINQ to DataSet

Le DataSet est un élément clé du modèle de programmation déconnecté sur lequel est construit ADO.NET, et il est largement utilisé. LINQ to DataSet permet aux développeurs de générer des fonctions de requête plus complètes dans DataSet en utilisant le même mécanisme de formulation de requêtes que de nombreuses autres sources de données. Pour plus d'informations, voir LINQ to DataSet.

LINQ to SQL

LINQ to SQL est un outil utile pour les développeurs qui n'ont pas besoin d'effectuer de mappage à un modèle conceptuel. Avec LINQ to SQL, vous pouvez utiliser directement le modèle de programmation LINQ sur un schéma de base de données existant. LINQ to SQL permet aux développeurs de générer des classes .NET Framework qui représentent des données. Plutôt que d'effectuer un mappage à un modèle conceptuel de données, ces classes générées effectuent un mappage direct aux tables de données, vues, procédures stockées et fonctions définies par l'utilisateur.

Avec LINQ to SQL, les développeurs peuvent écrire directement du code par rapport au modèle de stockage en utilisant le même modèle de programmation LINQ que dans les collections en mémoire et le DataSet, en plus d'autres sources de données telles que XML. Pour plus d'informations, voir LINQ to SQL.

LINQ to Entities

La plupart des applications sont actuellement écrites sur des bases de données relationnelles. À un certain stade, ces applications doivent interagir avec les données représentées sous forme relationnelle. Les schémas de base de données ne sont pas toujours adaptés à la création d'applications et les modèles conceptuels d'application sont différents des modèles logiques de base de données. Le Entity Data Model est un modèle conceptuel de données pouvant être utilisé pour modéliser les données d'un domaine particulier de sorte que des applications interagissent avec les données comme des objets. Pour plus d'informations, consultez ADO.NET Entity Framework.

Via le Entity Data Model, les données relationnelles sont exposées comme objets dans l'environnement .NET. Ainsi, la couche d'objets devient une cible idéale pour la prise en charge de LINQ, les développeurs pouvant formuler des requêtes sur la base de données dans le langage utilisé pour créer la logique métier. Cette fonctionnalité est appelée LINQ to Entities. Pour plus d'informations, consultez LINQ to Entities.

Voir aussi

Autres ressources

LINQ to DataSet

LINQ to SQL

LINQ to Entities

LINQ (Language-Integrated Query)