Cevap Geçmişi
«« Soruya geri dön
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.