Sobes.tech
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 IEnumerable a 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ě