Sobes.tech
Junior — Middle

Kā atšķirt IEnumerable no IQueryable un kādos gadījumos katru no tiem izmantot?

sobes.tech AI

Atbilde no AI

IEnumerable un IQueryable ir interfaces darbam ar kolekcijām, bet ar dažādiem uzvedības un mērķa:

  • IEnumerable<T> — tiek izmantots, lai pārlūkotu kolekcijas atmiņā. Datu vaicājumi tiek izpildīti uzreiz, un visas LINQ operācijas tiek apstrādātas klienta pusē (atmiņā).

  • IQueryable<T> — paplašina IEnumerable un ļauj veidot vaicājumus, kas var tikt pārveidoti par izteiksmēm, piemēram, SQL vaicājumiem. Vaicājuma izpilde tiek atlikta līdz brīdim, kad tas tiek pārlūkots (lazy execution), un operācijas tiek veiktas datu avota pusē (piemēram, datu bāzē).

Kad lietot:

  • IEnumerable — ja dati jau ir ielādēti atmiņā vai strādājat ar vietējām kolekcijām.
  • IQueryable — ja nepieciešams veidot vaicājumu uz attālinātu avotu (BD) un optimizēt atlasi, veicot filtrēšanu un kārtošanu serverī.

Piemērs:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Vaicājums uz datu bāzi tiks izveidots un izpildīts, kad tiks pārlūkots `usersQuery`

IEnumerable<User> usersList = usersQuery.ToList();
// Dati tiek ielādēti atmiņā, un turpmākās operācijas tiks veiktas lokāli