Sobes.tech
Junior — Middle
100

Чем отличаются интерфейсы IEnumerable и IQueryable, и в каких сценариях их использования?

Companies where asked
Банк ПСБ
Sector Tree

Answer from AI

sobes.tech AI

IEnumerable и IQueryable — это интерфейсы в C#, которые позволяют работать с коллекциями, но имеют разные сценарии использования и особенности:

  • IEnumerable<T> — предоставляет возможность перебора коллекции в памяти. Подходит для работы с уже загруженными данными. Операции LINQ с IEnumerable выполняются в памяти (клиентская сторона).

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

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

  • Если данные уже загружены в память или источник не поддерживает преобразование запросов — используйте IEnumerable.
  • Если работаете с удалёнными источниками данных (например, Entity Framework, базы данных) и хотите оптимизировать запросы — используйте IQueryable.

Пример:

// IQueryable позволяет сформировать SQL-запрос и выполнить его на сервере
IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);

// IEnumerable перебирает данные в памяти
IEnumerable<User> users = usersQuery.ToList();
foreach(var user in users) {
    Console.WriteLine(user.Name);
}