Sobes.tech
Junior — Middle

Ako rozlíšiť IEnumerable od IQueryable a v ktorých prípadoch ich použiť?

sobes.tech AI

Odpoveď od AI

IEnumerable a IQueryable sú rozhrania na prácu s kolekciami, ale s odlišným správaním a účelom:

  • IEnumerable<T> — slúži na prechádzanie kolekcií v pamäti. Dotazy na údaje sa vykonávajú okamžite a všetky LINQ operácie sa spracúvajú na strane klienta (v pamäti).

  • IQueryable<T> — rozširuje IEnumerable a umožňuje vytváranie dotazov, ktoré môžu byť prevedené na výrazy, napríklad SQL dotazy. Vykonanie dotazu je odložené do momentu prechádzania (lenivé vyhodnotenie), a operácie sa vykonávajú na strane zdroja dát (napríklad, databáza).

Kedy použiť:

  • IEnumerable — ak sú údaje už načítané v pamäti alebo pracujete s lokálnymi kolekciami.
  • IQueryable — ak potrebujete zostaviť dotaz na vzdialený zdroj (DB) a optimalizovať výber, vykonávajúc filtrovanie a zoradenie na serveri.

Príklad:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Dotaz do databázy bude formulovaný a vykonaný pri prechode usersQuery

IEnumerable<User> usersList = usersQuery.ToList();
// Dáta sú načítané do pamäti a ďalšie operácie budú vykonávané lokálne