SORU
20 Mayıs 2010, PERŞEMBE


Dönen IEnumerable<T> vs IQueryable<T>

IQueryable<T> vs IEnumerable<T> dönen arasındaki fark nedir?

IQueryable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;

IEnumerable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;

Hem yürütme ertelenmiş olacak ve ne zaman biri diğerinin üstüne tercih edilmelidir?

CEVAP
20 Mayıs 2010, PERŞEMBE


Evet, her ikisi de ertelenmiş yürütme verecektir.

Fark IQueryable<T> SQL SERİ (SERİ.-izin veren arabirim.-herhangi bir şey çalışmak. Ayrıca bir IQueryable üzerinde sorgu rafine&; T> lt eğer öyleyse; bu sorgu mümkünse veritabanında çalıştırılacak.

IEnumerable<T> durumda, SERİ-nesne, bütün nesneler, orijinal sorgu eşleşen veritabanından belleğe yüklenecek olacak anlamı olacak.

Kod:

IQueryable<Customer> custs = ...;
// Later on...
var goldCustomers = custs.Where(c => c.IsGold);

Bu kod sadece seçin altın müşteriler için SQL yürütülür. Aşağıdaki kodu, öte yandan veritabanında özgün sorgu, sonra hafızasında olmayan altın müşteriler filtreleyerek yürütülür:

IEnumerable<Customer> custs = ...;
// Later on...
var goldCustomers = custs.Where(c => c.IsGold);

Bu önemli bir fark var oldukça, ve IQueryable<T> çalışan; birçok durumda veritabanından çok fazla satır dönen kurtaracak. Başka bir örnek yapıyor belleği: Eğer kullandığınız Al ve Atla IQueryable, olur, sadece satır sayısı istenen; bunu bir IEnumerable<T> neden tüm satırlar için yüklü bellek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HTC

    HTC

    12 Ocak 2006
  • Need for Speed

    Need for Spe

    8 ŞUBAT 2006
  • sinumatic

    sinumatic

    19 Aralık 2006