Sobes.tech
Junior — Middle

Kaip atskirti IEnumerable nuo IQueryable ir kokiais atvejais naudoti kiekvieną iš jų?

sobes.tech AI

Atsakymas iš AI

IEnumerable ir IQueryable yra sąsajos, skirtos darbui su kolekcijomis, tačiau su skirtingu elgesiu ir paskirtimi:

  • IEnumerable<T> — naudojama kolekcijų perėjimui atmintyje. Užklausos duomenims vykdomos iš karto, ir visos LINQ operacijos apdorojamos kliento pusėje (atmintyje).

  • IQueryable<T> — išplečia IEnumerable ir leidžia kurti užklausas, kurios gali būti paverstos išraiškomis, pvz., SQL užklausomis. Užklausos vykdymas atidedamas iki jos perėjimo (vėlyvas vykdymas), ir operacijos vykdomos duomenų šaltinio pusėje (pvz., duomenų bazėje).

Kada naudoti:

  • IEnumerable — jei duomenys jau įkelti į atmintį arba dirbate su vietinėmis kolekcijomis.
  • IQueryable — jei reikia sukurti užklausą į nuotolinį šaltinį (BD) ir optimizuoti atranką, atlikti filtravimą ir rūšiavimą serveryje.

Pavyzdys:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Užklausa į duomenų bazę bus suformuota ir įvykdyta perėjus `usersQuery`

IEnumerable<User> usersList = usersQuery.ToList();
// Duomenys įkelti į atmintį, ir tolesnės operacijos bus atliekamos vietoje