Activation d’une source de données pour l’interrogation LINQ (Visual Basic)
Il existe différentes façons d’étendre LINQ pour interroger une source de données à partir du 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. Les différentes façons d’étendre LINQ pour ces sources de données sont les suivantes :
Implémentation de l’interface IEnumerable<T> dans un type pour activer l’interrogation LINQ to Objects 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 forme d’arborescences d’expression, qu’il peut exécuter de manière personnalisée, par exemple à distance.
Création pour votre source de données d’un fournisseur qui tire parti d’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 les interroger en utilisant LINQ to Objects. S’il est inutile d’activer l’énumération de ce 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 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. Visual Studio 2008 ne propose aucun modèle de fournisseur permettant d'étendre les technologies LINQ existantes, telles que LINQ to SQL, à d'autres types de sources de données.
Fournisseurs LINQ IQueryable
La complexité des fournisseurs LINQ qui implémentent IQueryable<T> peut énormément varier. 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. 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 traduire des requêtes LINQ complètes en un langage de requête expressif, par exemple SQL. Un fournisseur complexe est plus général qu'un fournisseur moins complexe, car il peut gérer une plus grande gamme 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.