Activation d'une source de données pour l'interrogation LINQ

Mise à jour : novembre 2007

Il y a différentes méthodes pour étendre LINQ pour permettre l'interrogation de toute source de données dans le modèle LINQ. La source de données peut être une structure de données, un service Web, un système de fichiers ou une base de données, par exemple. Le modèle LINQ permet aux clients d'interroger facilement une source de données pour laquelle l'interrogation LINQ est activée, car la syntaxe et le modèle de la requête ne changent pas. Il existe différentes manières d'étendre LINQ à ces sources de données, dont les suivantes :

  • Implémentation de l'interface IEnumerable<T> dans un type pour activer l'interrogation LINQ to Objects de ce type.

  • Création des méthodes d'opérateur de requête standard telles que Where et Select qui étendent un type, pour permettre l'interrogation LINQ personnalisée de ce type.

  • Création d'un fournisseur pour votre source de données qui implémente l'interface IQueryable<T>. Un fournisseur qui implémente cette interface reçoit des requêtes LINQ dans le formulaire des arborescences d'expression, qu'il peut exécuter d'une manière personnalisée, par exemple à distance.

  • Création d'un fournisseur pour votre source de données qui exploite une technologie LINQ existante. Ce type de fournisseur permettrait non seulement l'interrogation, mais également l'insertion, la mise à jour et la suppression d'opérations et le mappage pour des types définis par l'utilisateur.

Cette rubrique décrit ces options.

Comment activer l'interrogation LINQ de votre source de données

Données en mémoire

Vous pouvez activer l'interrogation LINQ des données en mémoire de deux manières. Si les données sont d'un type qui implémente IEnumerable<T>, vous pouvez interroger les données en utilisant LINQ to Objects. S'il est inutile d'activer l'énumération de ce type par l'implémentation de l'interface IEnumerable<T>, vous pouvez définir des méthodes d'opérateur de requête standard LINQ dans ce type ou créer des méthodes d'opérateur de requête standard LINQ qui étendent ce type. Les implémentations personnalisées des opérateurs de requête standard doivent utiliser l'exécution différée pour retourner les résultats.

Données distantes

La meilleure manière d'activer l'interrogation LINQ d'une source de données distante est d'implémenter l'interface IQueryable<T>. Toutefois, cette méthode diffère de l'extension d'un fournisseur tel que LINQ to SQL pour une source de données. Aucun modèle de fournisseur pour l'extension des technologies LINQexistantes, tel que LINQ to SQL, à d'autres types de source de données n'est disponible dans Visual Studio 2008.

Fournisseurs LINQ IQueryable

La complexité des fournisseurs LINQ qui implémentent IQueryable<T> peut varier énormément. Cette section décrit les différents niveaux de complexité.

Un fournisseur IQueryable moins complexe peut interagir avec une méthode unique d'un service Web, tel que le fournisseur créé dans la rubrique Procédure pas à pas : création d'un fournisseur LINQ IQueryable. Ce type de fournisseur est très particulier, car il attend des informations spécifiques dans les requêtes qu'il gère. Il se caractérise par un système de type fermé, exposant peut-être un type de résultat unique. La plus grande part de l'exécution de la requête est effectuée localement, par exemple à l'aide des implémentations Enumerable des opérateurs de requête standard. Un fournisseur moins complexe peut examiner une seule expression d'appel de méthode dans l'arborescence d'expression qui représente la requête, et la logique restante de la requête doit être gérée ailleurs.

Un fournisseur IQueryable de complexité moyenne peut cibler une source de données qui possède un langage de requête partiellement expressif. S'il cible un service Web, il peut interagir avec plusieurs méthodes du service Web et sélectionner la méthode d'appel en fonction de la question posée par la requête. Un fournisseur de complexité moyenne aurait un système plus sophistiqué que celui d'un fournisseur simple, qui serait néanmoins un système de type fixe. Par exemple, le fournisseur peut exposer des types qui ont des relations un-à-plusieurs qui peuvent être parcourues, mais il ne fournirait pas de technologie de mappage pour les types définis par l'utilisateur.

Un fournisseur IQueryable complexe, tel que le fournisseur LINQ to SQL, peut éventuellement traduire des requêtes LINQ complètes dans un langage de requête expressif, comme SQL. Un fournisseur complexe est plus généraliste qu'un fournisseur moins complexe, car il peut gérer une plus large variété de questions dans la requête. Il possède également un système de type ouvert et doit donc contenir une infrastructure étendue pour mapper les types définis par l'utilisateur. Développer un fournisseur complexe est une tâche difficile.

Voir aussi

Tâches

Procédure pas à pas : création d'un fournisseur LINQ IQueryable

Concepts

Vue d'ensemble des opérateurs de requête standard

LINQ to Objects

Référence

IQueryable<T>

IEnumerable<T>

Enumerable

Autres ressources

Link to Everything: A List of LINQ Providers