C# dilinde veriyle çalışmak hemen her uygulamada karşımıza çıkar. Listeler, diziler, koleksiyonlar, veritabanı sonuçları… Bunlar üzerinde arama yapmak, filtrelemek, sıralamak ya da gruplamak çoğu zaman temel ihtiyaçlarımızdan biridir. Geleneksel foreach d
LINQ ile Veri Sorgulama Temelleri

C# dilinde veriyle çalışmak hemen her uygulamada karşımıza çıkar. Listeler, diziler, koleksiyonlar, veritabanı sonuçları… Bunlar üzerinde arama yapmak, filtrelemek, sıralamak ya da gruplamak çoğu zaman temel ihtiyaçlarımızdan biridir. Geleneksel foreach
döngüleri veya if
kontrolleriyle bu işlemleri yapmak mümkün olsa da okunabilirlik ve verim açısından yetersiz kalabilir.
İşte bu noktada LINQ (Language Integrated Query), yani dile entegre sorgulama özelliği devreye girer. LINQ, C# ile SQL benzeri sorgular yazmanıza olanak tanır. Bu hem kodunuzu daha sade hale getirir, hem de güçlü bir sorgulama yeteneği kazandırır.
Bu yazıda LINQ’in temel sözdizimi, nasıl çalıştığı ve örneklerle koleksiyonlar üzerinde nasıl kullanıldığına değineceğiz.
LINQ Nedir?
LINQ (Language Integrated Query), C# 3.0 ile gelen ve farklı veri kaynakları üzerinde (koleksiyonlar, XML, SQL vb.) sorgulama yapmayı sağlayan bir teknolojidir. LINQ sayesinde hem nesne koleksiyonları hem de veri tabanı sonuçları üzerinde ortak bir sözdizimi ile işlem yapabilirsiniz.
LINQ iki temel şekilde yazılabilir:
-
Query Syntax (SQL'e benzer sözdizimi)
-
Method Syntax (Lambda ifadeleri ile yazılır)
Temel LINQ Örnekleri
1. Bir Koleksiyonu Filtreleme
List<string> isimler = new List<string> { "Ali", "Ayşe", "Mehmet", "Zeynep" };
// Query Syntax
var sonuc1 = from isim in isimler
where isim.StartsWith("A")
select isim;
// Method Syntax
var sonuc2 = isimler.Where(i => i.StartsWith("A")).ToList();
Burada, "A" harfiyle başlayan isimleri filtreledik. LINQ sayesinde hem daha kısa hem de daha anlaşılır kod elde ettik.
2. Nesne Koleksiyonu Üzerinde LINQ
public class Ogrenci
{
public int Id { get; set; }
public string Ad { get; set; }
public int Not { get; set; }
}
List<Ogrenci> ogrenciler = new List<Ogrenci>
{
new Ogrenci { Id = 1, Ad = "Ali", Not = 85 },
new Ogrenci { Id = 2, Ad = "Ayşe", Not = 92 },
new Ogrenci { Id = 3, Ad = "Mehmet", Not = 70 }
};
// 80 ve üzeri not alanları listeleyelim
var basariliOgrenciler = from o in ogrenciler
where o.Not >= 80
select o.Ad;
LINQ ile koleksiyonlar arasında SQL mantığında sorgulama yapılabilir. Bu hem nesne odaklı çalışmayı kolaylaştırır, hem de performansı artırır.
LINQ ile Gruplama ve Sıralama
Gruplama
var notGruplari = from o in ogrenciler
group o by o.Not >= 80 into gruplar
select new
{
BasariliMi = gruplar.Key,
Ogrenciler = gruplar.ToList()
};
Sıralama
var sirali = ogrenciler.OrderByDescending(o => o.Not);
Gruplama ve sıralama gibi işlemleri yazmak klasik yöntemlerle oldukça uzundur. LINQ bunu sadeleştirir.
Method Syntax Örneği
var ilkIki = ogrenciler
.Where(o => o.Not >= 80)
.OrderByDescending(o => o.Not)
.Take(2)
.Select(o => o.Ad);
Bu kod parçası, notu 80 ve üzeri olan ilk iki öğrenciyi not sırasına göre getirir. Görüldüğü gibi method syntax ile zincirleme işlemler daha rahat yazılabilir.
LINQ şu durumlarda oldukça etkilidir:
-
Koleksiyonlar üzerinde hızlı ve okunabilir sorgular yapmak
-
Veritabanından gelen
IQueryable
veriler üzerinde işlem yapmak -
XML veya JSON gibi veri kaynaklarını sade sorgularla yönetmek
-
Kod tekrarını ve karmaşık döngü yapılarının önüne geçmek
Kısacası LINQ, C# geliştiricileri için güçlü ve esnek bir sorgulama aracıdır. Hem performansı hem okunabilirliği artırır. Uygulamanızda daha profesyonel veri işleme için LINQ kullanmayı öğrenmek büyük bir adımdır.