Sobes.tech
Junior — Middle

¿Cómo distinguir IEnumerable de IQueryable y en qué casos se usa cada uno?

sobes.tech AI

Respuesta de la IA

IEnumerable y IQueryable son interfaces para trabajar con colecciones, pero con comportamientos y propósitos diferentes:

  • IEnumerable<T> — se usa para recorrer colecciones en memoria. Las consultas a los datos se ejecutan de inmediato, y todas las operaciones LINQ se procesan en el lado del cliente (en memoria).

  • IQueryable<T> — extiende IEnumerable y permite construir consultas que pueden ser transformadas en expresiones, por ejemplo, consultas SQL. La ejecución de la consulta se aplaza hasta el momento de recorrerla (ejecución perezosa), y las operaciones se realizan en el lado de la fuente de datos (por ejemplo, bases de datos).

Cuándo usar:

  • IEnumerable — si los datos ya están cargados en memoria o se trabaja con colecciones locales.
  • IQueryable — si necesitas construir una consulta a una fuente remota (base de datos) y optimizar la selección, realizando filtrado y ordenamiento en el servidor.

Ejemplo:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// La consulta a la base de datos se formará y ejecutará al recorrer usersQuery

IEnumerable<User> usersList = usersQuery.ToList();
// Los datos se cargan en memoria, y las operaciones siguientes se realizarán localmente