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.
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,4Sorgu 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")); // TrueYü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,40Sorguları 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,25Neler 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,4Kı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şFunckullanır;IQueryableiseExpression<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.
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
- İfade Ağaçları Nedir
- İfadeleri Elle Oluşturma
- İfadeleri Derleme ve Yürütme
- LINQ Sağlayıcılarında İfade Ağaçları