IQueryable IEnumerable Farklar
Husamettin Elalmis
IQueryable IEnumerable Farklar
Merhaba arkadaşlar, bu yazıda sizlere IQueryable ile IEnumerable arasındaki farklılıklardan bahsecedeğim.
IEnumerable
Liste üzerinde iterasyon yapmamızı sağlar
Memory üzerinde muhafaza edilir, memory üzerinde sorgulama yapar
GetEnumerator interfaceini otomatik olarak kullanarak foreach içerisinde dönmemizi sağlar
System.Collection namespaceinden türer
IQueryable
Uzak veri kaynağından veriyi çeker (database, webservice vb.)
Verileri sorgulamak için işlevsellik sağlar
System.Linq namespaceinden türer
IEnumerable interfacesinden implement edilmiştir
IEnumerabledeki tüm özelliklere sahiptir
IEnumerable ve IQueryable Farklılıkları
IEnumerable tüm veriyi alıp memoryde tutar, sorgulama işlemlerini memory üzerinde yapar.
IQueryable ise queryi oluşturarak doğrudan veritabanı üzerinden sorgulama işlemi yapar.
Milyonlarca kayıt üzerinde sorgulama işlemi yapılacak ise IQueryable kullanılmalıdır. IEnumerablea göre daha hızlı sorgulama işlemi yapar.
IEnumerable memorydeki kolleksiyonlar için idealdir.
IQueryable memory dışındaki (veritabanı, servis vb.) koleksiyonlar için idealdir.
IQueryable fazladan, IQueryProvider altında var olan CreateQuery ve Execute yöntemlerine sahiptir. Bu sayede doğrudan özel sorgular(expressionlar) yazıp çalıştırılabilir. IEnumerable bunu desteklemez.
IEnumerable lazy loading özelliğini desteklemez, IQueryable lazy loading özelliğini destekler.
LazyLoading nesneye ihtiyaç duyulduğu zaman veri kaynağından yükleme yapar (pagination)
IQueryable Üzerinde Predicate Kullanmak
Dynamic query oluşturmak için kullanılır
var keywords=new List<string>(){ "Test1","Test2" };
var predicate = PredicateBuilder.False<t_Users>();
foreach (var key in keywords)
{
predicate = predicate.Or (a => a.Text.Contains (key));
}
var query = context. t_Users.AsQueryable().Where(predicate);
IQueryable Üzerinde Predicate Filter Kullanmak
Parametre olarak lambda expression geçilmesini sağlar
Public IQuerayle<t_Users> GetAll(IQueryable<t_Users> list, Expression<Func<string, bool>> filter)
{
return list.Where(filter);
}
Sonuç
Bu dokumanda IQueryable ve IEnumerabler farklılıklarını görmüş olduk
IQueryable database seviyesinde daha etkin kullanılabildiğini gördük
Saygılarımla,
Hüsamettin ELALMIŞ – 29.05.2022
husamettin.elalmis@arksoft.com.tr
Last updated