Ana içeriğe geç

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);