C# Academy · Ders

LINQ Sağlayıcılarında İfade Ağaçları

Sağlayıcıların ifadeleri sorgulara nasıl dönüştürdüğünü görün.

4. ders / 413 adım

LINQ Sağlayıcılarında İfade Ağaçları, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

LINQ Neden İfade Ağaçlarına İhtiyaç Duyar

LINQ'in iki çeşidi vardır. IEnumerable<T>, lambdaları bellekte çalıştırır. IQueryable<T> ise bunları ifade ağaçları olarak alır; böylece bir sağlayıcı bunları SQL gibi başka bir dile dönüştürebilir.

IEnumerable ve IQueryable

Fark, parametre türündedir: IEnumerable.Where, Func<T,bool> (derlenmiş) alırken IQueryable.Where, Expression<Func<T,bool>> (bir ağaç) alır.

using System;
using System.Linq;
using System.Linq.Expressions;

int[] nums = { 1, 2, 3, 4 };
// IEnumerable path: lambda is a compiled delegate
var evens = nums.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(",", evens)); // 2,4

Sorgu Veri Olarak Kalır

IQueryable ile lambda'nız bir ifade ağacı olarak yakalanır ve henüz çalıştırılmaz. Sağlayıcı, bir sorgu oluşturmak için ağacı inceler.

using System;
using System.Linq;
using System.Linq.Expressions;

IQueryable<int> q = new[] { 1, 2, 3, 4, 5 }.AsQueryable();
var filtered = q.Where(n => n > 2);
Console.WriteLine(filtered.Expression.NodeType); // Call (a method-call tree)

Sorgu İfadesini İnceleme

Sorgulanabilir bir sorgudaki Expression özelliği, sağlayıcının dönüştüreceği ağacı açığa çıkarır.

using System;
using System.Linq;

var q = new[] { 10, 20, 30 }.AsQueryable().Where(x => x >= 20);
Console.WriteLine(q.Expression.ToString().Contains("Where")); // True

Yürütme Değil, Çeviri

Entity Framework gibi bir sağlayıcı, ağaçta ilerler ve WHERE Age > 18 gibi SQL üretir. C# koşulunuz istemci üzerinde çalışmaz; işi veritabanı yapar.

IQueryProvider'ın Rolü

IQueryable, bir IQueryProvider barındırır. Sorguyu numaralandırdığınızda sağlayıcı ifade ağacını alır ve nasıl çalıştırılacağına karar verir.

using System;
using System.Linq;

var q = new[] { 1, 2, 3 }.AsQueryable();
Console.WriteLine(q.Provider.GetType().Name); // EnumerableQuery (the in-memory provider)

Ertelenmiş Yürütme

Ağaç yalnızca numaralandırdığınızda (örneğin ToList veya foreach ile) dönüştürülür ve çalıştırılır. O zamana kadar, oluşturmaya devam edebileceğiniz saf bir veridir.

using System;
using System.Linq;

var q = new[] { 1, 2, 3, 4 }.AsQueryable()
    .Where(n => n > 1)
    .Select(n => n * 10);
// nothing has run yet; now force it:
Console.WriteLine(string.Join(",", q.ToList())); // 20,30,40

Sorguları Birleştirme

Her işleç ifade ağacına eklendiğinden, bir sorguyu aşamalar hâlinde oluşturabilirsiniz; sağlayıcı yürütme zamanında bütün sorguyu görür.

using System;
using System.Linq;

var baseQuery = new[] { 5, 15, 25, 35 }.AsQueryable();
var q = baseQuery.Where(n => n > 10);
q = q.Where(n => n < 30); // composed: 10 < n < 30
Console.WriteLine(string.Join(",", q.ToList())); // 15,25

Neler Dönüştürülemez

Sağlayıcılar yalnızca anlayabildikleri işlemleri dönüştürebilir. Rastgele bir C# yöntemini çağıran bir koşul, SQL karşılığı olmadığı için yürütme sırasında hata oluşturabilir.

Kendi Sağlayıcınızı Yazma

Özel sağlayıcılar IQueryProvider uygular ve ağaçta ilerleyip her düğümü hedef sorgu dillerine dönüştürmek için bir ExpressionVisitor kullanır.

Hepsini Bir Araya Getirme

Bu, temel fikri gösterir: aynı lambda, IEnumerable için bir temsilci, IQueryable içinse dönüşümü mümkün kılan bir ağaçtır.

using System;
using System.Linq;
using System.Linq.Expressions;

Expression<Func<int, bool>> predicate = n => n > 2;
var data = new[] { 1, 2, 3, 4 };
// IEnumerable needs a delegate:
Console.WriteLine(string.Join(",", data.Where(predicate.Compile()))); // 3,4
// IQueryable accepts the tree directly:
Console.WriteLine(string.Join(",", data.AsQueryable().Where(predicate))); // 3,4

Kısa Kontrol

İfade ağaçlarının LINQ sağlayıcılarındaki rolünü kontrol edin.

Özet

LINQ sağlayıcılarının ifade ağaçlarını nasıl kullandığını öğrendiniz.

  • IEnumerable, derlenmiş Func kullanır; IQueryable ise Expression<Func> ağaçlarını kullanır.
  • Sağlayıcılar ağacı çalıştırmak yerine (örneğin SQL'e) dönüştürür.
  • Yürütme, numaralandırılana kadar ertelenir.
  • Yalnızca dönüştürülebilen işlemler çalışır; rastgele yöntemler başarısız olabilir.
Başlamak ücretsiz

Yapay zeka eğitmeniyle C# öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
93
Dersler
346

Sıkça Sorulan Sorular

“LINQ Sağlayıcılarında İfade Ağaçları” dersi ücretsiz mi?

Evet — “LINQ Sağlayıcılarında İfade Ağaçları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“LINQ Sağlayıcılarında İfade Ağaçları” dersinde ne öğreneceğim?

Sağlayıcıların ifadeleri sorgulara nasıl dönüştürdüğünü görün. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“LINQ Sağlayıcılarında İfade Ağaçları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İfade Ağaçları Nedir
  2. İfadeleri Elle Oluşturma
  3. İfadeleri Derleme ve Yürütme
  4. LINQ Sağlayıcılarında İfade Ağaçları
← C# Academy Sayfasına Dön