Sobes.tech
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