Что отличает интерфейсы IEnumerable и IQueryable в использовании и назначении?
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 — для работы с уже загруженными коллекциями.