Middle
Kodni ichida IQueryable ni IEnumerable o'rniga qachon ishlatish kerakligini qanday aniqlash mumkin?
sobes.tech AI
AIdan javob
IQueryable dan foydalaning, agar siz ma'lumotlar manbasiga (masalan, ma'lumotlar bazasi) murakkab so'rovlar qilishni xohlasangiz va kechiktirilgan bajarilishini istasangiz. Bu IQueryable ta'minotchisiga LINQ ifodalarini mos so'rov tiliga (masalan, SQL) tarjima qilish va ma'lumotlarni olish jarayonini optimallashtirish imkonini beradi.
IEnumerable dan foydalaning, agar ma'lumotlar manbasi allaqachon xotirada bo'lsa yoki so'rov lokal ravishda bajarilsa (masalan, ob'ektlar ro'yxatini filtrlash). IEnumerable xotiradagi ob'ektlar kolleksiyasi bilan ishlaydi.
Asosiy farqlar:
| Xususiyat | IEnumerable | IQueryable |
|---|---|---|
| So'rov qayerda bajariladi | Mijozning xotirasida. | Ma'lumot manbasining tomonida. |
| Ishlash tezligi | Katta ma'lumotlar to'plamlari uchun kamroq samarali, chunki avval to'liq to'plam olinadi va keyin xotirada filtrlash amalga oshiriladi. | Katta ma'lumotlar to'plamlari uchun samaraliroq, chunki so'rov optimallashtiriladi va ma'lumot manbasida bajariladi, faqat kerakli ma'lumotlar olinadi. |
| Qobiliyatlar | LINQ to Objects ni qo'llab-quvvatlaydi. | LINQ to SQL/Entities va boshqa IQueryable ta'minotchilarini qo'llab-quvvatlaydi. |
| Kechiktirilgan bajarilish | Bor, lekin ma'lumotlarni qayta ishlash xotirada amalga oshiriladi. | Bor, so'rov ta'minotchisi ifoda daraxtini quradi va so'rovni ma'lumot manbasida bajaradi. |
IQueryable bilan Entity Framework Core dan foydalanish misoli:
// Faraz qilamiz, context Entity Framework ning DbContext si
var query = context.Products
.Where(p => p.Price > 100)
.OrderBy(p => p.Name)
.Select(p => p.Name); // So'rov quriladi, ammo bajarilmaydi
// So'rov faqat ro'yxatga o'tkazilganda bajariladi (masalan, ToList chaqirilganda)
var productNames = query.ToList();
Ma'lumotlar olgach, IEnumerable dan foydalanish misoli:
// Faraz qilamiz, products allaqachon xotirada IEnumerable<Product> kolleksiyasi
IEnumerable<Product> products = GetProductsFromCache(); // Yoki boshqa operatsiya, ma'lumotlarni xotirada qaytaradi
var filteredProducts = products.Where(p => p.Category == "Electronics"); // Filtrlash xotirada amalga oshiriladi