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ı.");
}