Junior — Middle
Como distinguir IEnumerable de IQueryable e em que casos usar cada um deles?
sobes.tech IA
Resposta da IA
IEnumerable e IQueryable são interfaces para trabalhar com coleções, mas com comportamentos e propósitos diferentes:
-
IEnumerable<T> — usado para percorrer coleções na memória. As consultas aos dados são executadas imediatamente, e todas as operações LINQ são processadas no lado do cliente (na memória).
-
IQueryable<T> — estende IEnumerable e permite construir consultas que podem ser transformadas em expressões, por exemplo, consultas SQL. A execução da consulta é adiada até ao momento de percorrê-la (execução preguiçosa), e as operações são realizadas no lado da fonte de dados (por exemplo, bases de dados).
Quando usar:
IEnumerable— se os dados já estiverem carregados na memória ou se estiver a trabalhar com coleções locais.IQueryable— se precisar construir uma consulta a uma fonte remota (BD) e otimizar a seleção, realizando filtragem e ordenação no servidor.
Exemplo:
IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// A consulta à base de dados será formada e executada ao percorrer usersQuery
IEnumerable<User> usersList = usersQuery.ToList();
// Os dados são carregados na memória, e as operações seguintes serão realizadas localmente