C#

C# LINQ İpuçları: Günlük Hayatı Kolaylaştıran 10 Kullanım Örneği

· 6 dakika okuma · 0
C# LINQ İpuçları: Günlük Hayatı Kolaylaştıran 10 Kullanım Örneği

Merhaba,

C# geliştiricilerinin çoğu LINQ kullanıyor ama genellikle Where, Select, FirstOrDefault ile sınırlı kalıyor. Oysa LINQ çok daha fazlasını sunuyor. Gerçek projelerde işime yarayan 10 örneği paylaşmak istedim.

1. GroupBy ile Gruplama

Siparişleri müşteri bazında gruplayıp toplam tutarı bulmak:

var result = orders
    .GroupBy(o => o.CustomerId)
    .Select(g => new {
        CustomerId = g.Key,
        TotalAmount = g.Sum(o => o.Amount),
        OrderCount = g.Count()
    });

2. SelectMany ile İç İçe Koleksiyonları Düzleştirme

Her siparişin içindeki ürünleri tek liste yapmak:

var allProducts = orders
    .SelectMany(o => o.Products)
    .Distinct()
    .ToList();

3. Zip ile İki Listeyi Eşleştirme

var paired = names.Zip(scores, (name, score) =>
    new { Name = name, Score = score });

4. Chunk ile Listeleri Parçalara Bölme

.NET 6 ile gelen Chunk metodu toplu işlemlerde çok işe yarıyor arkadaşlar:

var batches = records.Chunk(100);
foreach (var batch in batches)
{
    await ProcessBatchAsync(batch);
}

5. DistinctBy ile Belirli Alana Göre Tekil Alma

var uniqueByEmail = users
    .DistinctBy(u => u.Email)
    .ToList();

6. MinBy / MaxBy

var mostExpensive = products.MaxBy(p => p.Price);
var cheapest = products.MinBy(p => p.Price);

7. Aggregate ile Özel Birleştirme

var csv = names.Aggregate((a, b) => $"{a},{b}");
// "Ali,Veli,Ayse"

8. Join ile İki Koleksiyonu Birleştirme

var result = orders.Join(
    customers,
    o => o.CustomerId,
    c => c.Id,
    (o, c) => new { o.OrderDate, c.Name }
);

9. TakeWhile / SkipWhile

// Koşul sağlandığı sürece al, bozulunca dur
var leading = scores.TakeWhile(s => s >= 60);

10. ToDictionary ile Hızlı Lookup

var productById = products
    .ToDictionary(p => p.Id, p => p);

// Sonra O(1) ile eriş:
var product = productById[42];

Performans Notu

LINQ okunabilirliği artırıyor ama her zaman en hızlı çözüm değil. Büyük veri setlerinde AsParallel() ile PLINQ'ya geçmeyi düşünebilirsiniz. Ama önce profil alın, erken optimizasyona girmeyin :)

İyi Günler Dilerim.

Bu yazıyı paylaş: