Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Il existe différentes façons d’étendre LINQ pour permettre à n’importe quelle source de données d’être interrogée 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, pour en nommer un. 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. Les façons dont LINQ peut être étendu à ces sources de données sont les suivantes :
Implémentation de l’interface IEnumerable<T> dans un type pour permettre les requêtes LINQ sur les objets de ce type.
Création de méthodes d’opérateur de requête standard telles que Where et Select qui étendent un type pour activer 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 sous la forme d’arborescences d’expressions, qu’elle peut exécuter de manière personnalisée, par exemple à distance.
Création d’un fournisseur pour votre source de données qui tire parti d’une technologie LINQ existante. Un tel fournisseur permet non seulement d’interroger, mais également d’insérer, de mettre à jour et de supprimer des opérations et un mappage pour les types définis par l’utilisateur.
Cette rubrique traite de ces options.
Comment activer l’interrogation LINQ de votre source de données
Données en mémoire
Il existe deux façons d’activer l’interrogation LINQ des données en mémoire. Si les données sont d’un type qui implémente IEnumerable<T>, vous pouvez interroger les données à l’aide de LINQ to Objects. S’il n’est pas judicieux d’activer l’énumération de votre type en implémentant 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 le 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 option pour activer l’interrogation LINQ d’une source de données distante consiste à implémenter l’interface IQueryable<T> . Toutefois, cela diffère de l’extension d’un fournisseur tel que LINQ to SQL pour une source de données. Aucun modèle fournisseur pour étendre des technologies LINQ existantes, telles que LINQ to SQL, à d’autres types de source de données sont disponibles dans Visual Studio 2008.
Fournisseurs de LINQ IQueryable
Les fournisseurs LINQ qui implémentent IQueryable<T> peuvent varier considérablement dans leur complexité. Cette section décrit les différents niveaux de complexité.
Un fournisseur moins complexe IQueryable peut s’interfacer avec une méthode unique d’un service Web. Ce type de fournisseur est très spécifique, car il attend des informations spécifiques dans les requêtes qu’il gère. Il a un système de type fermé, qui expose peut-être un seul type de résultat. La plupart de l’exécution de la requête se produit localement, par exemple en utilisant les Enumerable implémentations 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’expressions qui représente la requête et laisser la logique restante de la requête être gérée ailleurs.
Un IQueryable fournisseur de complexité moyenne peut cibler une source de données qui a un langage de requête partiellement expressif. S’il cible un service Web, il peut s’interfacer avec plusieurs méthodes du service Web et sélectionner la méthode à appeler en fonction de la question que pose la requête. Un fournisseur de complexité moyenne aurait un système de type plus riche qu’un fournisseur simple, mais il serait toujours 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 qui ne fournissent pas de technologie de mappage pour les types définis par l’utilisateur.
Un fournisseur complexe IQueryable , tel que le fournisseur LINQ to SQL, peut traduire des requêtes LINQ complètes en langage de requête expressif, tel que SQL. Un fournisseur complexe est plus général qu’un fournisseur moins complexe, car il peut gérer une plus grande variété de questions dans la requête. Il dispose également d’un système de type ouvert et doit donc contenir une infrastructure étendue pour mapper les types définis par l’utilisateur. Le développement d’un fournisseur complexe nécessite une quantité importante d’efforts.