Junior — Middle
Comment distinguer IEnumerable de IQueryable et dans quels cas utiliser chacun d'eux?
sobes.tech IA
Réponse de l'IA
IEnumerable et IQueryable sont des interfaces pour travailler avec des collections, mais avec des comportements et des usages différents :
-
IEnumerable<T> — utilisé pour parcourir des collections en mémoire. Les requêtes sur les données sont exécutées immédiatement, et toutes les opérations LINQ sont traitées côté client (en mémoire).
-
IQueryable<T> — étend IEnumerable et permet de construire des requêtes qui peuvent être transformées en expressions, par exemple, des requêtes SQL. L'exécution de la requête est différée jusqu'au moment de l'itération (exécution paresseuse), et les opérations sont effectuées côté source de données (par exemple, une base de données).
Quand l'utiliser :
IEnumerable— si les données sont déjà chargées en mémoire ou si vous travaillez avec des collections locales.IQueryable— si vous devez construire une requête vers une source distante (base de données) et optimiser la sélection en effectuant le filtrage et le tri côté serveur.
Exemple :
IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// La requête à la base de données sera formée et exécutée lors de l'itération de usersQuery
IEnumerable<User> usersList = usersQuery.ToList();
// Les données sont chargées en mémoire, et les opérations suivantes seront effectuées localement