2012-01-20 1 views
11

J'ai lu quelques articles qui indiquent que IEnumerable utilisé pour imiter les procédures stockées ou restreindre votre base de données. Capacité de chargement paresseux perdue sur le fournisseur externe.IQueryable vs IEnumerable dans le modèle de référentiel, chargement paresseux

Où comme IQueryable pour donner aux développeurs plus de flexibilité. Le chargement paresseux est là.

En termes de performance, les deux consomment une quantité importante de performance .. alors lequel est le plus préférable?

+1

Comme toujours ... cela dépend de quoi exactement vous avez besoin ... –

Répondre

21

Du point de vue d'un Pattern Repository, vous pouvez penser de cette façon:

  1. Utilisez une charge IEnumerable avide quand vous voulez passer une liste complète au client en une seule fois. Ils peuvent toujours ajouter des clauses linq, mais le client ne bénéficie pas d'une exécution différée.

  2. Utilisez un chargement différé IQueryable lorsque vous souhaitez étendre les fonctions d'interrogation différée au client, en permettant au client d'ajouter ses propres clauses linq. Cela reporte l'exécution de la requête entière jusqu'à ce que la sortie soit requise.

Voir aussi
Deferred execution and eager evaluation

0

La principale différence entre « IEnumerable » et « IQueryable » est sur le point où la logique de filtrage est exécuté. L'un s'exécute côté client (en mémoire) et l'autre s'exécute sur la base de données. Par conséquent, lorsque vous interrogez des données provenant de collections en mémoire telles que List, Array, etc, vous devez utiliser IEnumerable. En revanche, lorsque vous interrogez des données à partir de collections hors mémoire (comme la base de données distante, le service), vous devez utiliser IQueryable.

0

IEnumerable vs IQueryable

IQueryable est le meilleur pour les données côté serveur, alors que IEnumerable est le mieux pour les tableaux/listes qui utilise le côté client.

Questions connexes