SORU
12 Mart 2010, Cuma


Ne'In IQueryable ve IEnumerable arasındaki fark

Farkı anlamış değilim. Oldukça yeni .Net, IEnumerables Seri uzantıları kullanarak sorgu biliyorum. Bu IQueryable ne kadar ve nasıl bir fark var?


Ayrıca bu soru ile örtüşen What is the difference between IQueryable[T] and IEnumerable[T]? bkz.

CEVAP
12 Mart 2010, Cuma


IEnumerable<T> T salt ileri imleç temsil eder. .NET 3.5 ekledi Where ve doğrulamaları veya anonim işlevler gerektiren tüm operatörler Func<T> alarak First, LINQ standard query operators dahil uzatma yöntemleri.

IQueryable<T> aynı SERİ standart sorgu operatörleri uygular, ama koşullar ve anonim fonksiyonlar için Expression<Func<T>> kabul eder. Expression<T> derlenmiş bir ifade ağaç, yöntemin kırık bir sürümü (sorgulanabilir sağlayıcısı tarafından ayrıştırılabilir"yarı derlenmiş") ve buna uygun olarak kullanılır.

Örneğin:

IEnumerable<Person> people = GetEnumerablePeople();
Person person = people.Where(x => x.Age > 18).FirstOrDefault();

IQueryable<Person> people = GetQueryablePeople();
Person person = people.Where(x => x.Age > 18).FirstOrDefault();

, x => x.Age > 18 ilk bloğu içinde başka bir yöntem gibi idam edilebilir bir anonim yöntem (Func<Person, bool>),. Enumerable.Where Her kişi için yieldıng hangi yöntemi true verilen değerler bir kez yöntemini çalıştırır.

İkinci blokta x => x.Age > 18 "'Yaş' özelliği >olarak düşünülebilecek bir ifade ağacı (Expression<Func<Person, bool>>), ". 18

Bu ifade, ağaç ayrıştırma ve eşdeğer SQL haline dönüştürebilir çünkü ETMENİZ için SQL var gibi şeyler sağlar. Ve çünkü sağlayıcı gerekmez idam edilene kadar IQueryable numaralandırılmış (uygular IEnumerable<T>, sonra, yapabilirsiniz birleştirmek birden fazla sorgu operatörleri (yukarıdaki örnek Where FirstOrDefault) yapmak daha akıllıca seçimler üzerinde nasıl çalıştırmak için tüm sorgu karşı temel veri kaynağı (gibi kullanarak SELECT TOP 1 SQL).

Bkz:

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • Kim Barbin

    Kim Barbin

    3 Mayıs 2012