Sobes.tech
Back to questions
Junior — Middle
65

Что отличает интерфейсы IEnumerable и IQueryable в использовании и назначении?

Companies where asked
Платформа
IT OneIT One

Answer from AI

sobes.tech AI

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

  • IEnumerable<T> — используется для перебора коллекций в памяти. Запросы к данным выполняются на стороне клиента, то есть все данные сначала загружаются в память, а затем фильтруются или обрабатываются. Подходит для работы с локальными коллекциями.

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

Пример:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18); // Запрос к БД
List<User> usersList = usersQuery.ToList(); // Выполнение запроса и загрузка данных

IEnumerable<User> usersEnumerable = usersList.Where(u => u.Name.StartsWith("A")); // Фильтрация в памяти

Таким образом, IQueryable лучше использовать для построения запросов к удалённым источникам данных, а IEnumerable — для работы с уже загруженными коллекциями.