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
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:
Ne'In IQueryable ve IEnumerable a...
'IEnumerable ve Dizi arasındaki f...
Arasındaki fark .dosya deposu .piç dos...
C Lambda: arasındaki Fark "kesile...
'In arasındaki fark ne ve Factory...