Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

IEnumerable ve IQueryable arasında ne fark var?

LINQ sorgusu konusunu incelediğimde LINQ sorgularının döndürdüğü 2 temel liste tipinden bahsediliyor.

Birisi IEnumerable, diğeri IQueryable.

Bu ikisi arasında ne fark var? Hangisini ne zaman kullanmalı?

Soran:13.04.16 19:15
misafir  

1 Cevap

0
IEnumerable LINQ for Objects için, yani hafızadaki List , dizi vs. sorgulaması sonucunda elde edilecek değerler için kullanılıyor. IEnumerable bellekteti veya belleğe aldığı veriler üzerinden seçim yapar. System.Collections isim alanında yer alır.

IQueryable ise LINQ for Database için yani veritabanından sorgulanan değerler için kullanılıyor. Bu eğer veritabanı bağlantısı varsa veritabanı üzerinde SQL sorgusu yaparak değerleri seçiyor. Tabi eğer hedef veritabanı ise. IQueryable  System.Linq isim alanında yer alır.

IEnumerable ile veritabanı bağlantısı olan bir nesne üzerinden sorgu isterseniz tüm liste hafızaya alınacak ve daha sonra bu liste üzerinden filtrelerinize göre seçme işlemi yapılacaktır.

IQueryable ile LINQ sorgusu yapıldığında ise  veritabanı üzerinde çalıştırılacak sorguda tüm filtreler yer alalacak ve sadece istenen kayıtlar yüklenecektir.

IEnumerable hafızadaki koleksiyonlar için idealdir.
IQueryable hafıza dışındaki (veritabanı, servis vs.) koleksiyonlar için idealdir.

IQueryable fazladan CreateQuery ve Execute yöntemlerine sahiptir. Bu şekilde doğrudan özel sorguları yazıp çalıştırabiliriz. IEnumerable bunu desteklemez.

IQueryable ve IEnumerable'nin her ikisi de ertelenmiş çalıştırma (Deffered Execution) kullanır. Ancak IQueryable  ertelenmiş çalıştırma işlemine benzer bir işlem olan tembel yükleme (Lazy Loading) kullanır. Yani veritabanından kayıtları siz  kullanmaya başlayana kadar çağırmaz. Bu da sayfalama gibi bir çok işlemde çok faydalıdır.

Kaynak:
http://www.dotnet-tricks.com/Tutorial/linq/I8SY160612-IEnumerable-VS-IQueryable.html


Cevaplayan: 13.04.16 19:10
cevapsitesi
102,034p 15ü
Cevabı seçen: 08.06.16 00:01
canora
101,387p 4ü