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
IEnumerablea 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