CodeBlanks Logo Icon CodeBlanks

IQueryable

C# kursu · İleri seviye · Ders 41/83

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

  1. 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.

  2. 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();
  3. 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

İleri seviye bölümündeki tüm dersler