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);
}