Différences entre IQueryable et IEnumerable
Pour effectuer des requêtes Linq, on peut choisir des structures de liste satisfaisant une des deux interfaces IQueryable
ou IEnumerable
. IQueryable
dérive de IEnumerable
.
Caractéristiques de IEnumerable:
- plus appropriée pour la manipulation de listes (listes génériques, Arrays etc…),
- permet de parcourir une liste dans le sens normal,
- exécute la requête en base, charge ensuite les données en mémoire puis effectue un filtre sur les données,
- plus intéressant pour Linq to objects et Linq to XML
- ne supporte pas les requête personnalisées,
- ne supporte pas l’initialisation tardive (i.e. Lazy loading) => cette interface n’est pas adaptée pour le “paging”.
Caractéristiques de IQueryable
- permet de parcourir une liste dans le sens normal (pas de retour en arrière et pas de déplacements entre les éléments),
- exécute les requêtes dans les serveurs SQL,
- est appropriée pour exécuter des requêtes sur des bases de données déportées.
- est plus appropriée pour Linq to SQL,
- supporte les requêtes personnalisées avec
CreateQuery()
etExecute()
, - supporte l’initialisation tardive (Lazy loading) => est adapté au “paging”.