Sobes.tech
Junior — Middle

Чӣ гуна метавон фарқ кард байни IEnumerable ва IQueryable ва дар кадом ҳолатҳо ҳар яке истифода бурда мешавад?

sobes.tech AI

Ҷавоб аз AI

IEnumerable ва IQueryable интерфейсҳои кор бо ҷамъиятҳо мебошанд, аммо бо рафтор ва мақсадҳои гуногун:

  • IEnumerable<T> — барои убур дар ҷамъиятҳо дар хотира истифода мешавад. Пурсишҳо ба маълумотҳо фавран иҷро мешаванд ва ҳамаи амалҳои LINQ дар ҷониби муштарӣ (дар хотира) коркард мешаванд.

  • IQueryable<T> — васеъгардонии IEnumerable ва имкон медиҳад, ки пурсишҳо ба изразҳо табдил дода шаванд, масалан, пурсишҳои SQL. Иҷрои пурсиш то вақти убур (амалӣ кардан бо хомӯшӣ) таъхир мешавад ва амалҳо дар ҷониби манбаи маълумот (масалан, базаи додаҳо) иҷро мешаванд.

Вақте истифода бурдан:

  • IEnumerable — агар маълумот аллакай дар хотира бор карда шуда бошад ё бо ҷамъиятҳои маҳаллӣ кор кунед.
  • IQueryable — агар хоҳед, ки пурсиш ба манбаи дур (БД) созед ва интихоби оптималӣ кунед, бо филтр ва сортинг дар сервер.

Масалан:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Пурсиш ба базаи додаҳо ҳангоми убур аз usersQuery шакл мегирад ва иҷро мешавад

IEnumerable<User> usersList = usersQuery.ToList();
// Маълумот ба хотира бор карда мешавад ва амалҳои минбаъда дар маҳал иҷро мешаванд