Junior — Middle
Jak rozlišit IEnumerable od IQueryable a v jakých případech je používat?
sobes.tech AI
Odpověď od AI
IEnumerable a IQueryable jsou rozhraní pro práci s kolekcemi, ale s odlišným chováním a účelem:
-
IEnumerable<T> — slouží k procházení kolekcí v paměti. Dotazy na data jsou prováděny okamžitě a všechny LINQ operace jsou zpracovávány na straně klienta (v paměti).
-
IQueryable<T> — rozšiřuje
IEnumerablea umožňuje vytvářet dotazy, které mohou být převedeny na výrazy, například SQL dotazy. Provádění dotazu je odloženo do okamžiku průchodu (lenivé vyhodnocení), a operace jsou prováděny na straně zdroje dat (například databáze).
Kdy použít:
IEnumerable— pokud jsou data již načtena do paměti nebo pracujete s lokálními kolekcemi.IQueryable— pokud potřebujete sestavit dotaz na vzdálený zdroj (DB) a optimalizovat výběr, provádět filtrování a řazení na serveru.
Příklad:
IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Dotaz do databáze bude sestaven a proveden při průchodu usersQuery
IEnumerable<User> usersList = usersQuery.ToList();
// Data jsou načtena do paměti a další operace budou prováděny lokálně