Cevap Geçmişi
13.04.16 22:11
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
Ekleyen: cevapsitesi
Değiştiren: cevapsitesi
Cevap olarak seçen: canora
13.04.16 19:10
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.
Ekleyen: cevapsitesi
En fazla 3 eski durum gösterilir.