Что такое LINQ? Разница между IEnumerable и IQueryable?
Ответ от нейросети
sobes.tech AI
LINQ (Language Integrated Query) — это технология в C#, которая позволяет писать запросы к коллекциям данных непосредственно в коде на C# с использованием синтаксиса, похожего на SQL. LINQ упрощает работу с данными, делая код более читаемым и выразительным.
Разница между IEnumerable и IQueryable:
-
IEnumerable<T> — интерфейс для перебора коллекций в памяти. Запросы к IEnumerable выполняются в памяти, то есть данные сначала загружаются, а затем фильтруются или обрабатываются. Подходит для работы с коллекциями в оперативной памяти.
-
IQueryable<T> — расширяет IEnumerable и позволяет строить запросы, которые могут быть преобразованы в выражения, исполняемые на стороне источника данных (например, в базе данных). Запросы к IQueryable откладываются и выполняются на сервере, что позволяет оптимизировать выборку данных.
Пример:
IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18); // запрос к БД
var usersList = usersQuery.ToList(); // выполнение запроса и получение данных
IEnumerable<User> usersEnumerable = usersList.Where(u => u.IsActive); // фильтрация в памяти
Таким образом, IQueryable эффективен для построения запросов к удалённым источникам данных, а IEnumerable — для работы с уже загруженными коллекциями.