Sobes.tech
Junior — Middle

Kako razlikovati IEnumerable od IQueryable i u kojim slučajevima ih koristiti?

sobes.tech АИ

Одговор од АИ

IEnumerable i IQueryable su interfejsi za rad sa kolekcijama, ali sa različitim ponašanjem i namenom:

  • IEnumerable<T> — koristi se za prolazak kroz kolekcije u memoriji. Upiti na podatke se izvršavaju odmah, i sve LINQ operacije se obrađuju na strani klijenta (u memoriji).

  • IQueryable<T> — proširuje IEnumerable i omogućava izgradnju upita koji mogu biti pretvoreni u izraze, na primer, SQL upite. Izvršenje upita se odlaže do trenutka prolaska (lenjivo izvršenje), i operacije se izvršavaju na strani izvora podataka (npr. baze podataka).

Kada koristiti:

  • IEnumerable — ako su podaci već učitani u memoriju ili radite sa lokalnim kolekcijama.
  • IQueryable — ako želite da izgradite upit ka udaljenom izvoru (baza podataka) i optimizujete izbor, vršeći filtriranje i sortiranje na serveru.

Primer:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Upit ka bazi podataka će biti formiran i izvršen pri prolazu kroz usersQuery

IEnumerable<User> usersList = usersQuery.ToList();
// Podaci se učitavaju u memoriju, a naredne operacije će se izvršavati lokalno