IQueryable
IQueryable ile ifade tabanlı sorguyu öğrenirsin.
IQueryable nedir?
IQueryable<T>, IEnumerable<T>'i genişleten ve bir ifade ağacı ile sağlayıcı (provider) tutan arayüzdür. LINQ sağlayıcıları (ör. EF Core) bu ifade ağacını SQL'e çevirir.
Bu nedenle Where, Select gibi çağrılar IQueryable üzerinde yeni elemanları bellekte değil, ifade ağacına ekler. Sorgu, üzerinde foreach açtığında veya ToList çağırdığında yürütülür; buna ertelenmiş yürütme denir.
IQueryable vs IEnumerable
IEnumerable<T> bellekte yürütülür: LINQ metotları koleksiyon üzerinde doğrudan çalışır. IQueryable<T> ise ifade ağacını uzak sorguya çevirir; örneğin SQL veri tabanında filtre yapılır.
Aynı Where çağrısı iki arayüzde farklı anlama gelir. Bellekteki listede LINQ-to-Objects; veri tabanında LINQ-to-Entities çalışır. Bu yüzden büyük verilerde IQueryable tercih edilir.
Uygulama IQueryable oluştur ve Count al
int[] numbers = { 1, 2, 3, 4, 5 }; dizisini .AsQueryable() ile IQueryable<int>'e çevir ve query değişkenine ata. var filtered = query.Where(n => n > 2); ile süz. filtered.Count() sonucunu Console.WriteLine ile yazdır.
Örnek çözümü göster
IQueryable<int> query = numbers.AsQueryable(); ile sorguyu oluştur. var filtered = query.Where(n => n > 2); ile süz. Console.WriteLine(filtered.Count()); ile sayıyı yazdır.
Örnek çözüm:
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5 };
IQueryable<int> query = numbers.AsQueryable();
var filtered = query.Where(n => n > 2);
Console.WriteLine(filtered.Count());
}
}
Kendini test et
-
IQueryable neyi tutar?
- Yalnızca veriyi
- Bir delegeyi
- Bir ifade ağacı ve provider
- Bir Type nesnesi
Cevabı göster
Bir ifade ağacı ve provider — Doğru. IQueryable bir ifade ağacı ve provider tutar.
-
IQueryable türünü tamamla
IQueryable<____> query = new int[] { 1, 2, 3 }.AsQueryable();Cevabı göster
IQueryable<int> query = new int[] { 1, 2, 3 }.AsQueryable(); -
Arayüzü davranışa eşle
- IEnumerable<T>
- Bellekte yürütür
- IQueryable<T>
- İfade ağacı tutar
- Expression
- Sorgu verisi
- Provider
- Çeviri yapar