Junior — Middle
Как да различим IEnumerable от IQueryable и в кои случаи ги използваме?
sobes.tech AI
Отговор от AI
IEnumerable и IQueryable са интерфейси за работа с колекции, но с различно поведение и предназначение:
-
IEnumerable<T> — използва се за обхождане на колекции в паметта. Запитванията към данните се изпълняват веднага, и всички LINQ операции се обработват от клиента (в паметта).
-
IQueryable<T> — разширява IEnumerable и позволява създаването на запитвания, които могат да бъдат преобразувани в изрази, например SQL заявки. Изпълнението на запитването се отлага до момента на обхождане (лениво изпълнение), и операциите се изпълняват на страната на източника на данни (например, база данни).
Кога да се използва:
IEnumerable— ако данните вече са заредени в паметта или работите с локални колекции.IQueryable— ако трябва да създадете запитване към отдалечен източник (БД) и да оптимизирате избора, като извършвате филтриране и сортиране на сървъра.
Пример:
IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Запитването към базата данни ще бъде формулирано и изпълнено при обхождане на usersQuery
IEnumerable<User> usersList = usersQuery.ToList();
// Данните се зареждат в паметта, и следващите операции ще се изпълняват локално