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

  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006
  • huyked

    huyked

    28 Mart 2008
  • joshsnice

    joshsnice

    28 Kasım 2006