IEnumerable<T>
Il de différentes façons qu'un ensemble de choses peut être stocké, dans une liste, dans un tableau, dans une base de données, etc. Une chose que ces mécanismes de stockage ont en commun est que l'ensemble de choses étant détenu peut être Enumerated, qui est chacun peut être consulté l'un après l'autre en utilisant un langage de construction tel que foreach
par exemple.
L'interface IEnumerable<T>
représente cette interface commune que tous les détenteurs d'ensembles de choses doivent activer l'énumération.Par conséquent IEnumberable<Person
représente une interface qui permet l'énumération d'un ensemble d'objets Person
sans être précis sur la manière dont ces objets sont stockés.
IQueryable<T>
Ceci est une extension à IEnumerable<T>
mais représente quelque chose de spécifique à LINQ. Dans LINQ, vous pouvez spécifier une requête pouvant filtrer et transformer un ou plusieurs ensembles d'éléments. Contre une interface purement IEnumerable<T>
cela serait connu comme LINQ to Objects, dans lequel chaque étape de la requête est finalement un simple appel à une méthode d'extension.
Cependant, par rapport à un objet qui implémente IQueryable<T>
, les choses peuvent être plus sophistiquées. L'objet implémentant IQueryable<T>
peut être associé à un autre fournisseur LINQ qui peut implémenter l'exécution de requêtes LINQ d'une manière différente. Par exemple, IQueryable<Person>
peut être implémenté par un type associé au fournisseur LINQ-To-SQL. Dans ce cas, une requête LINQ est transformée en une requête T-SQL exécutée sur une base de données pour obtenir un ensemble d'éléments (le résultat ne doit pas nécessairement être un ensemble d'objets Person
).
IEnumerable est un type .Net, et non un terme OOP – Gishu
BTW, c'est OOP (Object Oriented Programming) pas OOPS. J'ai édité pour le réparer cependant. – Aamir
@Amir vous avez raison. Je plaide la diffusion sémantique :) - cependant si vous demandez à Alan Kay et à d'autres personnes distinguées, OOPS est apte pour ce qu'il est devenu. – Gishu