LINQ Extension Methods¶
LINQ (Language Integrated Query), C# ile veri işlemlerini kolaylaştırmak için güçlü bir araçtır. LINQ, genişletme metotları (extension methods) ile sorgu yazımını daha esnek ve okunabilir hale getirir. Ancak, bu metotların yanlış kullanımı performans kaybına ve karmaşık kod yapılarına yol açabilir.
1. Gereksiz ToList
Kullanımı¶
❌ Yanlış Kullanım: Sorguların her adımında ToList
kullanmak.
var filteredData = context.Data
.Where(d => d.IsActive)
.ToList()
.Select(d => d.Name)
.ToList();
✅ İdeal Kullanım: Sorguyu tek bir işlemde yürütün.
var filteredData = context.Data
.Where(d => d.IsActive)
.Select(d => d.Name)
.ToList();
2. Büyük Veri Setlerinde OrderBy
ile Performans Sorunları¶
❌ Yanlış Kullanım: Bellekte sıralama yapmak.
var data = context.Data.ToList().OrderBy(d => d.Name).ToList();
✅ İdeal Kullanım: Sıralama işlemini veritabanında gerçekleştirin.
var data = context.Data
.OrderBy(d => d.Name)
.ToList();
3. Gereksiz Select
Kullanımı¶
❌ Yanlış Kullanım: Gereksiz projeksiyonlar yapmak.
var data = context.Data
.Select(d => new { d.Id, d.Name })
.Select(d => d.Name)
.ToList();
✅ İdeal Kullanım: Doğrudan ihtiyacınız olan veriyi seçin.
var data = context.Data
.Select(d => d.Name)
.ToList();
4. First
ve Single
Kullanımını Yanlış Yönetmek¶
❌ Yanlış Kullanım: Veri bulunamaması durumunda hata veren First
veya Single
kullanmak.
var item = context.Data.First(d => d.Id == 1); // Veri yoksa hata fırlatır
✅ İdeal Kullanım: Güvenli sorgulamalar için FirstOrDefault
veya SingleOrDefault
kullanın.
var item = context.Data.FirstOrDefault(d => d.Id == 1);
if (item == null)
{
Console.WriteLine("Veri bulunamadı.");
}
5. Count
Kullanımıyla Performansı Etkilemek¶
❌ Yanlış Kullanım: Count
‘u bellek içindeki bir koleksiyona uygulamak.
var count = context.Data.ToList().Count;
✅ İdeal Kullanım: Veritabanında Count
işlemini gerçekleştirin.
var count = context.Data.Count();
6. Genişletme Metotları ile Karmaşık Yapılar Yazmak¶
❌ Yanlış Kullanım: Tek satırda karmaşık işlemleri zincirlemek.
var data = context.Data
.Where(d => d.IsActive)
.OrderBy(d => d.Name)
.Select(d => new { d.Id, d.Name, d.Date })
.ToList()
.GroupBy(d => d.Date.Year);
✅ İdeal Kullanım: İşlemleri adımlara bölerek kodu daha okunabilir hale getirin.
var activeData = context.Data
.Where(d => d.IsActive)
.OrderBy(d => d.Name)
.Select(d => new { d.Id, d.Name, d.Date })
.ToList();
var groupedData = activeData.GroupBy(d => d.Date.Year);
7. Any
ve Exists
Kullanımını Göz Ardı Etmek¶
❌ Yanlış Kullanım: Var olup olmadığını kontrol etmek için Count
kullanmak.
var exists = context.Data.Count(d => d.IsActive) > 0;
✅ İdeal Kullanım: Daha performanslı Any
metodunu kullanın.
var exists = context.Data.Any(d => d.IsActive);