web-dev-qa-db-fra.com

Quels types instanciables mettant en œuvre IQueryable <T> sont disponibles dans .Net 4.0?

Dans le contexte de C # sur .Net 4.0, existe-t-il des objets intégrés qui implémentent IQueryable<T>?

40
one.beat.consumer

IQueryable les objets sont produits par des fournisseurs de requêtes (par exemple LINQ to SQL, LINQ to Entities/Entity Framework, etc.). Pratiquement rien de ce que vous pouvez instancier avec new dans le .NET de base Le framework implémente IQueryable.

IQueryable est une interface conçue pour être utilisée pour créer des fournisseurs de requêtes, qui permettent à la bibliothèque LINQ d'être exploitée par rapport à un magasin de données externe en créant une arborescence d'expression analysable. Par nature, Queryables nécessite un contexte - des informations concernant exactement ce que vous interrogez. Utiliser new pour créer n'importe quel type IQueryable, qu'il soit possible ou non, ne vous mène pas très loin.

Cela étant dit, tout IEnumerable peut être converti en IQueryable en utilisant la méthode d'extension AsQueryable(). Cela crée une construction superficiellement similaire, mais fonctionnellement très différente en arrière-plan comme lors de l'utilisation de méthodes LINQ contre un objet IEnumerable simple. C'est probablement la source de requêtes la plus abondante à laquelle vous avez accès sans configurer un fournisseur IQueryable réel. Ce basculement est très utile pour tester les algorithmes basés sur LINQ car vous n'avez pas besoin du magasin de données réel, juste d'une liste de données en mémoire qui peuvent l'imiter.

61
KeithS

Eh bien, votre question est un peu bizarre ... mais je crois que si vous regardez une interface dans Reflector , elle vous donne une liste des implémenteurs dans les assemblys chargés.

Comme avertissement, je n'ai pas utilisé Reflector depuis qu'il est payé pour jouer, donc je peux me tromper.

3
kprobst

EntityCollection fait, tout comme EnumerableQuery .

Ce n'est pas que je pense que l'un ou l'autre va vous mener n'importe où. Pour vous aider, nous devons savoir ce que vous essayez vraiment de résoudre. Si vous écrivez un fournisseur LINQ, vous devez lire ceci: http://msdn.Microsoft.com/en-us/library/bb546158.aspx .

Ils recommandent d'écrire votre propre implémentation.

3
Chris Shain