Junior — Middle
Cum se deosebește IEnumerable de IQueryable și în ce cazuri se utilizează fiecare dintre ele?
sobes.tech AI
Răspuns de la AI
IEnumerable și IQueryable sunt interfețe pentru lucrul cu colecții, dar cu comportamente și scopuri diferite:
-
IEnumerable<T> — este utilizat pentru parcurgerea colecțiilor în memorie. Interogările la date se execută imediat, iar toate operațiunile LINQ sunt procesate pe partea clientului (în memorie).
-
IQueryable<T> — extinde IEnumerable și permite construirea de interogări care pot fi transformate în expresii, de exemplu, interogări SQL. Executarea interogării este amânată până la momentul parcurgerii (execuție leneșă), iar operațiunile sunt efectuate pe partea sursei de date (de exemplu, baze de date).
Când să folosiți:
IEnumerable— dacă datele sunt deja încărcate în memorie sau lucrați cu colecții locale.IQueryable— dacă trebuie să construiți o interogare către o sursă la distanță (BD) și să optimizați selecția, efectuând filtrare și sortare pe server.
Exemplu:
IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Interogarea către baza de date va fi formulată și executată la parcurgerea lui usersQuery
IEnumerable<User> usersList = usersQuery.ToList();
// Datele sunt încărcate în memorie, iar operațiunile ulterioare vor fi efectuate local