Sobes.tech
Middle

Kodda IQueryable istifadə etməli olduğunuz zamanın necə müəyyən ediləcəyini necə təyin etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

IQueryable-dən istifadə edin, məlumat mənbəsinə (məsələn, verilənlər bazası) mürəkkəb sorğular etmək və gecikdirilmiş icra ilə işləmək lazım olduqda. Bu, IQueryable təminatçısına LINQ ifadələrini müvafiq sorğu dilinə (məsələn, SQL) çevirməyə və məlumatların alınmasını optimallaşdırmağa imkan verir.

IEnumerable-dən istifadə edin, məlumat mənbəsi artıq yaddaşdadırsa və ya sorğu yerli olaraq icra olunursa (məsələn, obyektlərin siyahısını filtrləmək). IEnumerable yaddaşdakı obyekt kolleksiyaları ilə işləyir.

Əsas fərqlər:

Xüsusiyyət IEnumerable IQueryable
Sorğu harada icra olunur Müştərinin yaddaşında. Məlumat mənbəsinin tərəfində.
Performans Böyük məlumat dəstləri üçün daha az səmərəlidir, çünki əvvəlcə bütün dəst alınır və sonra yaddaşda filtrlənir. Böyük məlumat dəstləri üçün daha səmərəlidir, çünki sorğu optimallaşdırılır və məlumat mənbəsində icra olunur, yalnız lazım olan məlumatlar alınır.
İmkanlar LINQ to Objects dəstəkləyir. LINQ to SQL/Entities və digər IQueryable təminatçılarını dəstəkləyir.
Gecikdirilmiş icra Mövcuddur, lakin məlumatların işlənməsi yaddaşda baş verir. Mövcuddur, sorğu təminatçısi ifadə ağacı qurur və sorğunu məlumat mənbəsində icra edir.

IQueryable ilə Entity Framework Core istifadə nümunəsi:

// Tutaq ki, context Entity Framework-in DbContext-i
var query = context.Products
                   .Where(p => p.Price > 100)
                   .OrderBy(p => p.Name)
                   .Select(p => p.Name); // Sorğu qurulur, lakin icra edilmir

// Sorğu yalnız siyahıya çevrildikdə icra olunur (məsələn, ToList çağırılarkən)
var məhsulAdları = query.ToList();

Məlumatlar alındıqdan sonra IEnumerable istifadə nümunəsi:

// products artıq yaddaşda olan IEnumerable<Product> kolleksiyasıdır
IEnumerable<Product> products = GetProductsFromCache(); // Və ya başqa bir əməliyyat, məlumatları yaddaşa gətirir

var filtrlənmişMəhsullar = products.Where(p => p.Category == "Electronics"); // Filtrləmə yaddaşda baş verir