Question

Je fais de plus en plus d'exercices avec Lambda mais je ne comprends pas pourquoi certains exemples utilisent par exemple .AsQueryable (); qui utilisent IQueryable et omettent parfois <<>> .AsQueryable. et utilisez le IEnumerable.

J'ai lu le MSDN mais je ne vois pas comment. "exécution d'un arbre d'expression" est un avantage sur pas.

Quelqu'un peut-il m'expliquer?

Était-ce utile?

La solution

IQueryable implémente IEnumerable. Ainsi, dès le départ, avec IQueryable, vous pouvez faire tout ce que vous pouvez faire avec IEnumerable. IQueryables traite de la conversion d'une expression lambda en requête sur la source de données sous-jacente - il peut s'agir d'une base de données SQL ou d'un ensemble d'objets.

En gros, vous ne devriez généralement pas avoir à vous soucier d'une manière ou d'une autre s'il s'agit d'un IQueryable ou d'un IEnumerable.

Autres conseils

En tant qu'utilisateur, vous ne devriez généralement pas vous en soucier, il s'agit en réalité de l'implémenteur de la source de données. Si les fournisseurs de données implémentent simplement IEnumerable, vous exécutez LINQ lors de l’exécution d’objets, c’est-à-dire qu’il s’agit d’une opération en mémoire sur les collections. IQueryable fournit à la source de données la possibilité de traduire l’arbre d’expression en une représentation alternative à exécuter une fois l’expression exécutée (généralement par énumération), comme le font Linq2Sql, Linq2Xml et Linq2Entities.

Le seul moment où je peux voir l’utilisateur final qui s’inquiète, c’est s’ils souhaitent inspecter l’arbre d’expression à exécuter, car IQueryable expose Expression. Une autre utilisation pourrait être d’inspecter le fournisseur. Mais ces deux scénarios doivent en réalité être réservés aux implémenteurs d'autres fournisseurs de requêtes et vouloir transformer l'expression. Le point important de Linq est que vous ne devriez pas avoir à vous soucier de la mise en oeuvre de l’exécution de l’expression à utiliser.

Je suis d'accord avec Arne Claassen, il est parfois nécessaire de réfléchir à l'implémentation sous-jacente fournie par les sources de données. Par exemple, cochez cette blog post qui montre en quoi les scripts SQL générés par IEnumerable et IQueryable sont différents dans certains scénarios.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top