Sobes.tech
Junior — Middle

Hogyan különböztetjük meg az IEnumerable-t az IQueryable-tól, és melyik esetben mikor használjuk őket?

sobes.tech MI

Válasz az MI-től

IEnumerable és IQueryable interfészek gyűjtemények kezelésére, de különböző viselkedéssel és céllal:

  • IEnumerable<T> — memória alapú gyűjtemények bejárására szolgál. Az adatok lekérdezése azonnal végrehajtódik, és minden LINQ művelet a kliens oldalon (memóriában) kerül feldolgozásra.

  • IQueryable<T> — kiterjeszti az IEnumerable-et, és lehetővé teszi olyan lekérdezések építését, amelyek kifejezésekké alakíthatók, például SQL-lekérdezésekké. A lekérdezés végrehajtása késleltetett, azaz a bejárás pillanatáig (lusta végrehajtás), és a műveletek a forrásoldalon (pl. adatbázis) történnek.

Mikor használjuk:

  • IEnumerable — ha az adatok már betöltődtek a memóriába, vagy helyi gyűjteményekkel dolgozunk.
  • IQueryable — ha távoli forráshoz (pl. adatbázishoz) szeretnénk lekérdezést építeni, és optimalizálni a kiválasztást, szűrést és rendezést a szerveren.

Példa:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// A kérés az adatbázishoz a usersQuery bejárásakor lesz kialakítva és végrehajtva

IEnumerable<User> usersList = usersQuery.ToList();
// Az adatok betöltődnek a memóriába, és a további műveletek helyben történnek