Ana içeriğe geç

Select, Where ve Aggregate

LINQ sorguları, koleksiyonlar ve veritabanı işlemleri üzerinde etkili bir şekilde veri işlemek için güçlü bir araçtır. Ancak, Select, Where ve Aggregate gibi LINQ yöntemlerinin yanlış kullanımı performans kaybına ve karmaşık kod yapısına yol açabilir.


1. Gereksiz Select Kullanımı

Yanlış Kullanım: Gerekli olmayan veri projeksiyonları yapmak.

var productNames = context.Products
    .Select(p => new { p.Name, p.Price })
    .Select(p => p.Name)
    .ToList();

İdeal Kullanım: Gereksiz Select projeksiyonlarından kaçının.

var productNames = context.Products
    .Select(p => p.Name)
    .ToList();

2. Where ile Karmaşık Filtreler Yazmak

Yanlış Kullanım: Where içinde karmaşık mantık kullanarak okunabilirliği azaltmak.

var expensiveProducts = context.Products
    .Where(p => p.Price > 100 && p.Stock > 0 && p.Category == "Electronics")
    .ToList();

İdeal Kullanım: Filtreleri yardımcı metotlarla bölerek okunabilirliği artırın.

var expensiveProducts = context.Products
    .Where(IsExpensiveAndInStock)
    .ToList();

bool IsExpensiveAndInStock(Product product) =>
    product.Price > 100 && product.Stock > 0 && product.Category == "Electronics";

3. Aggregate‘i Yanlış Kullanmak

Yanlış Kullanım: Basit toplam veya birleştirme işlemleri için Aggregate kullanmak.

var totalStock = context.Products
    .Select(p => p.Stock)
    .Aggregate(0, (acc, stock) => acc + stock);

İdeal Kullanım: Basit işlemler için uygun LINQ yöntemlerini kullanın.

var totalStock = context.Products.Sum(p => p.Stock);

4. Performansı Göz Ardı Etmek

Yanlış Kullanım: Filtreleri veritabanı yerine bellek içinde yapmak.

var products = context.Products.ToList();
var expensiveProducts = products.Where(p => p.Price > 100);

İdeal Kullanım: Filtreleme işlemlerini veritabanı tarafında yapın.

var expensiveProducts = context.Products
    .Where(p => p.Price > 100)
    .ToList();

5. Çok Aşamalı Sorguların Karmaşıklaştırılması

Yanlış Kullanım: Birden fazla LINQ zinciri ile karmaşık sorgular yazmak.

var productData = context.Products
    .Where(p => p.Price > 100)
    .Select(p => new { p.Name, p.Stock })
    .Where(p => p.Stock > 10)
    .ToList();

İdeal Kullanım: Sorguları açık ve tek bir zincir halinde yazın.

var productData = context.Products
    .Where(p => p.Price > 100 && p.Stock > 10)
    .Select(p => new { p.Name, p.Stock })
    .ToList();

6. Hatalı First ve Single Kullanımı

Yanlış Kullanım: First veya Single kullanarak hata riski oluşturmak.

var product = context.Products.Single(p => p.Id == 1); // Veri yoksa hata verir.

İdeal Kullanım: FirstOrDefault veya SingleOrDefault kullanarak güvenli sorgulama yapın.

var product = context.Products.SingleOrDefault(p => p.Id == 1);
if (product == null)
{
    Console.WriteLine("Ürün bulunamadı.");
}