Il y a trois implémentations de AsEnumerable
.
DataTableExtensions.AsEnumerable
S'étend un DataTable
une IEnumerable
interface de sorte que vous pouvez utiliser Linq contre l' DataTable
.
Enumerable.AsEnumerable<TSource>
et ParallelEnumerable.AsEnumerable<TSource>
L' AsEnumerable<TSource>(IEnumerable<TSource>)
méthode n'a aucun effet
plutôt que de changer le type de compilation de la source à partir d'un type de
implémente IEnumerable<T>
de IEnumerable<T>
lui-même.
AsEnumerable<TSource>(IEnumerable<TSource>)
peut être utilisé pour choisir
entre les implémentations de requête lorsqu'une séquence met en œuvre
IEnumerable<T>
, mais a également une autre série de méthodes de requête
disponible. Par exemple, étant donné une classe générique Table
qui implémente
IEnumerable<T>
et a ses propres méthodes telles que l' Where
, Select
, et
SelectMany
, un appel à l' Where
invoquent le public Where
méthode de
Table
. Un Table
type qui représente une table de base de données pourrait avoir un
Where
méthode qui prend le prédicat argument comme une expression de l'arbre
et convertit l'arbre à SQL pour l'exécution à distance. Si l'exécution à distance
n'est pas souhaitée, par exemple parce que le prédicat invoque un local
de la méthode, l' AsEnumerable<TSource>
méthode peut être utilisée pour masquer la
méthodes personnalisées et de prendre plutôt les opérateurs de requête standard
disponible.
En d'autres termes.
Si j'ai un
IQuerable<X> sequence = ...;
à partir d'un LinqProvider, comme Entity Framework, et je le fais,
sequence.Where(x => SomeUnusualPredicate(x));
cette requête sera composé et exécuté sur le serveur. On va à l'échec à l'exécution parce que le EntityFramework ne savez pas comment convertir SomeUnusualPredicate
en SQL.
Si je veux que pour exécuter l'instruction avec Linq to Objects au lieu de cela, je le fais,
sequence.AsEnumerable().Where(x => SomeUnusualPredicate(x));
maintenant que le serveur va renvoyer toutes les données et l' Enumerable.Where
de Linq to Objects sera utilisé à la place de la Requête du Fournisseur de la mise en œuvre.
Il ne sera pas question que Entity Framework ne sais pas comment interpréter SomeUnusualPredicate
, ma fonction sera utilisée directement. (Cependant, cela peut être une mauvaise approche, car toutes les lignes seront retournées par le serveur.)