crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C# LINQ Rehberi: Koleksiyonlar Üzerinde SQL Tadında Sorgular
LINQ, farklı veri kaynaklarından (listeler, diziler, XML veya veritabanı) veri çekmeyi, filtrelemeyi ve sıralamayı standart bir hale getiren güçlü bir sözdizimidir. "Kodun içindeki SQL" olarak da adlandırılır.
1. Neden LINQ Kullanmalıyız?
Klasik yöntemle 10 satırda yapacağınız bir işlemi LINQ ile tek satırda halledebilirsiniz.
Geleneksel Yöntem (Foreach):
C#:
List<int> sayilar = new List<int> { 5, 12, 8, 20, 3, 15 };
List<int> buyukSayilar = new List<int>();
foreach (int s in sayilar)
{
if (s > 10) buyukSayilar.Add(s);
}
LINQ Yöntemi:
C#:
var buyukSayilar = sayilar.Where(s => s > 10).ToList();
[]Okunabilirlik: Kodun ne yaptığını bir bakışta anlarsınız.
[]Hata Payı Düşüktür: Döngü yönetimiyle uğraşmazsınız.- Tip Güvenliği: Derleme zamanında hataları yakalar.
2. LINQ Yazım Türleri
LINQ iki farklı şekilde yazılabilir. Hangisini seçeceğiniz tamamen kişisel tercihinize veya projenin standartlarına bağlıdır.
A) Method Syntax (Lambda İfadeleri)
En popüler ve modern yöntemdir. Metotları zincirleme (chaining) şeklinde kullanırsınız.
C#:
var sonuc = liste.Where(x => x.Ad.StartsWith("A")).OrderBy(x => x.Id);
B) Query Syntax (Sorgu Sözdizimi)
SQL'e çok benzer. Karmaşık join işlemlerinde daha okunaklı olabilir.
C#:
var sonuc = from x in liste
where x.Ad.StartsWith("A")
orderby x.Id
select x;
3. En Çok Kullanılan LINQ Operatörleri
Günlük hayatta en sık karşılaşacağınız operatörler şunlardır:
[]Where: Koşula göre filtreleme yapar.
[]Select: Veriyi dönüştürür (Örneğin sadece isimleri çekmek).
[]OrderBy / OrderByDescending: A'dan Z'ye veya Z'den A'ye sıralar.
[]First / FirstOrDefault: İlk elemanı getirir (Bulamazsa hata verir veya null döner).
[]Any: Listede koşula uyan en az bir eleman var mı diye bakar (bool döner).
[]Sum, Min, Max, Average: Matematiksel hesaplamalar yapar.
C#:
var urunler = new List<Urun> { ... };
// Fiyatı 100'den büyük olanları pahalıdan ucuza sırala
var filtreliUrunler = urunler.Where(u => u.Fiyat > 100)
.OrderByDescending(u => u.Fiyat);
// Sadece ürün isimlerini içeren bir string listesi oluştur
var isimler = urunler.Select(u => u.UrunAdi).ToList();
4. Ertelenmiş Çalışma (Deferred Execution)
LINQ'nun en ilginç özelliği budur. Siz bir LINQ sorgusu yazdığınızda o an çalışmaz. Ne zaman ki veriyi bir foreach içine alırsınız veya .ToList() / .ToArray() dersiniz, işte o zaman sorgu gerçek zamanlı olarak çalıştırılır. Bu özellik, büyük veri setlerinde performans avantajı sağlar.
Sonuç
LINQ, modern C# geliştiriciliğinin omurgasıdır. Koleksiyonları yönetmeyi zahmetten kurtarıp bir keyfe dönüştürür. Özellikle Entity Framework gibi veritabanı kütüphaneleriyle birleştiğinde, kod yazma hızınızı inanılmaz bir seviyeye çıkarır.