436 votes

Quelle est la différence entre IQueryable<T> et IEnumerable<T> ?

Quelle est la différence entre IQueryable<T> et IEnumerable<T> ?

10voto

seyed Points 51

IEnumerable se réfère à une collection mais IQueryable est juste une requête qui sera générée dans un arbre d'expression. Nous allons exécuter cette requête pour obtenir des données de la base de données.

7voto

bostIT Points 171

Voici ce que j'ai écrit sur un poste similaire (sur ce sujet). (Et non, je n'ai pas l'habitude de me citer, mais ce sont de très bons articles).

"Cet article est utile : IQueryable vs IEnumerable dans LINQ-to-SQL .

Je cite cet article : "Selon la documentation MSDN, les appels effectués sur IQueryable fonctionnent en construisant l'arbre d'expression interne à la place. "Ces méthodes qui étendent IQueryable(Of T) n'effectuent pas d'interrogation directe. Au lieu de cela, leur fonctionnalité consiste à construire un objet Expression, qui est un arbre d'expression qui représente la requête cumulative. "'

Les arbres d'expression sont une construction très importante en C# et sur la plate-forme .NET. (Ils sont importants en général, mais C# les rend très utiles). Pour mieux comprendre la différence, je vous recommande de lire les différences entre expressions et déclarations dans la spécification officielle de C# 5.0 ici. Pour les concepts théoriques avancés qui se ramifient en lambda calculus, les expressions permettent de prendre en charge les méthodes en tant qu'objets de première classe. La différence entre IQueryable et IEnumerable est centrée sur ce point. IQueryable construit des arbres d'expression alors que IEnumerable ne le fait pas, du moins pas en termes généraux pour ceux d'entre nous qui ne travaillent pas dans les laboratoires secrets de Microsoft.

Voici un autre article très utile qui détaille les différences d'un point de vue "push" et "pull". (Par "push" et "pull", je fais référence à la direction du flux de données. Techniques de programmation réactive pour .NET et C#

Voici un très bon article qui détaille les différences entre les lambdas d'instructions et les lambdas d'expression et qui aborde plus en profondeur les concepts des lambdas d'expression : Réexamen des délégués C#, des arbres d'expression et des instructions lambda par rapport aux expressions lambda. ."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X