Что такое IEnumerable и IQueryable, в чём разница?

IEnumerable и IQueryable — интерфейсы для работы с коллекциями, но с разным поведением и назначением:

Короткий ответ

Что ответить на собеседовании

IEnumerable и IQueryable — интерфейсы для работы с коллекциями, но с разным поведением и назначением:

Подробный разбор

Ответ с пояснениями

IEnumerable и IQueryable — интерфейсы для работы с коллекциями, но с разным поведением и назначением:

  • IEnumerable<T> — используется для перебора коллекций в памяти. Запросы к данным выполняются сразу, и все операции LINQ обрабатываются на стороне клиента (в памяти).
  • IQueryable<T> — расширяет IEnumerable и позволяет строить запросы, которые могут быть преобразованы в выражения, например, SQL-запросы. Выполнение запроса откладывается до момента перебора (ленивое выполнение), и операции выполняются на стороне источника данных (например, базы данных).

Когда использовать:

  • IEnumerable — если данные уже загружены в память или работа идет с локальными коллекциями.
  • IQueryable — если нужно построить запрос к удаленному источнику (БД) и оптимизировать выборку, выполняя фильтрацию и сортировку на сервере.

Пример:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Запрос к базе данных сформируется и выполнится при переборе usersQuery

IEnumerable<User> usersList = usersQuery.ToList();
// Данные загружены в память, дальнейшие операции будут выполняться локально

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку