Sobes.tech
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();
// Данните се зареждат в паметта, и следващите операции ще се изпълняват локално