Sitemap

LINQ Nedir? C# ile Veriyi Sorgulamanın Güçlü Yolu

5 min readSep 17, 2024

Merhaba! Bu yazıda LINQ (Language Integrated Query) ile veri sorgulama işlemlerini inceleyeceğiz. LINQ’un temel kavramlarını, nasıl çalıştığını ve gerçek dünyada nasıl kullanılabileceğini ele alarak, veri yönetimini daha verimli hale getirmenin yollarını keşfedeceğiz. Hadi başlayalım ve LINQ’un veri sorgulamada nasıl bir yenilik sunduğunu birlikte görelim!

Veri Sorgulama Gif

LINQ (Language Integrated Query), C# ve diğer .NET dillerinde veri sorgulamayı daha kolay ve anlaşılır hale getiren bir özelliktir. SQL benzeri sorguları C# kodu içinde yazmamıza izin verir. Bu sayede koleksiyonlar, veri tabanları, XML belgeleri gibi farklı veri kaynaklarında tutarlı sorgular oluşturabiliriz. LINQ, kodun okunabilirliğini artırır ve veri işlemlerini daha verimli hale getirir. Temel amacı, veri yönetimini standartlaştırarak geliştiricilerin işini kolaylaştırmaktır.

LINQ sorguları, koleksiyonlar üzerinde veri filtreleme, sıralama ve dönüşüm işlemleri için kullanılır. Where, Select ve OrderBy gibi metotlar, verileri kolayca yönetmenizi sağlar. LINQ'u kullanmak için projenize System.Linq kütüphanesini dahil etmeniz yeterlidir.

using System.Linq

Bazı temel LINQ sorgularınının kullanımına aşağıdaki örnekleri verebiliriz:

Where sorgusu, bir koleksiyondaki elemanları belirli bir koşula göre filtrelemek için kullanılır. Bu metot, yalnızca koşulu sağlayan elemanları içeren bir sonuç kümesi döndürür ve verileri daha dar bir aralığa indirmeye yardımcı olur.

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// WHERE sorgusu ile 5'ten büyük sayıları filtreleyelim
var filteredNumbers = numbers.Where(n => n > 5);

foreach (var number in filteredNumbers)
{
Console.WriteLine(number);
} //Çıktı: 6,7,8,9,10

Select sorgusu, verileri seçmek ve dönüştürmek için kullanılır. Bu metot, bir koleksiyonun her bir elemanını belirli bir dönüşüm fonksiyonuna göre dönüştürür ve bu dönüşüm sonucunda yeni bir koleksiyon oluşturur.

List<Order> orders = new List<Order>
{
new Order { OrderId = 1, ProductName = "Laptop", Quantity = 2 },
new Order { OrderId = 2, ProductName = "Mouse", Quantity = 5 },
};

// SELECT operatörü ile sadece ürün isimlerini seçiyoruz
var productNames = orders.Select(o => o.ProductName);

foreach (var productName in productNames)
{
Console.WriteLine(productName);
} // Çıktı: "Laptop", "Mouse"

OrderBy/OrderByDescending sorguları, verileri sıralamak için kullanılır. OrderBy operatörü verileri artan sırayla sıralarken, OrderByDescending operatörü verileri azalan sırayla sıralar.

List<Order> orders = new List<Order>
{
new Order { OrderId = 1, ProductName = "Laptop", Quantity = 2 },
new Order { OrderId = 2, ProductName = "Mouse", Quantity = 5 },
new Order { OrderId = 3, ProductName = "Keyboard", Quantity = 3 }
};

// Quantity'ye göre artan sırayla sıralama
var orderedByQuantityAscending = orders.OrderBy(o => o.Quantity);
foreach (var order in orderedByQuantityAscending)
{
Console.WriteLine($"{order.ProductName}: {order.Quantity}");
} //Çıktı: Laptop: 2,Keyboard: 3, Mouse: 5

Console.WriteLine();

// Quantity'ye göre azalan sırayla sıralama
var orderedByQuantityDescending = orders.OrderByDescending(o => o.Quantity);
foreach (var order in orderedByQuantityDescending)
{
Console.WriteLine($"{order.ProductName}: {order.Quantity}");
} //Çıktı: Mouse: 5,Keyboard: 3, Laptop: 2

Count metodu, belirli bir koşula uyan öğelerin sayısını belirlemenizi sağlar. Bu metot, koleksiyonun tüm öğelerinin sayısını veya belirli bir koşulu sağlayan öğelerin sayısını döndürebilir.

List<Order> orders = new List<Order>
{
new Order { OrderId = 1, ProductName = "Laptop", Quantity = 2 },
new Order { OrderId = 2, ProductName = "Mouse", Quantity = 5 },
new Order { OrderId = 3, ProductName = "Keyboard", Quantity = 3 }
};

// Toplam sipariş sayısını al
int totalOrders = orders.Count();

Console.WriteLine("Toplam Sipariş Sayısı: " + totalOrders);
//Çıktı: Toplam Sipariş Sayısı: 3

Min ve Max metodları, koleksiyonlar üzerinde minimum ve maksimum değerleri belirlemenizi sağlar. Bu metodlar, genellikle sayısal veriler içeren koleksiyonlar üzerinde en küçük veya en büyük değeri bulmak için kullanılır.

List<Order> orders = new List<Order>
{
new Order { OrderId = 1, ProductName = "Laptop", Quantity = 2 },
new Order { OrderId = 2, ProductName = "Mouse", Quantity = 5 },
new Order { OrderId = 3, ProductName = "Keyboard", Quantity = 3 }
};

// Siparişlerdeki en düşük Quantity değerini al
int minQuantity = orders.Min(o => o.Quantity);
Console.WriteLine("En düşük Quantity değeri: " + minQuantity); //Çıktı: 2

// Siparişlerdeki en yüksek Quantity değerini al
int maxQuantity = orders.Max(o => o.Quantity);
Console.WriteLine("En yüksek Quantity değeri: " + maxQuantity);//Çıktı: 5

Average metodu, koleksiyon içindeki sayısal değerlerin ortalamasını hesaplamanızı sağlar. Bu metod, genellikle sayısal veri içeren koleksiyonlar üzerinde ortalama değer hesaplamak için kullanılır.

List<Order> orders = new List<Order>
{
new Order { OrderId = 1, ProductName = "Laptop", Quantity = 2 },
new Order { OrderId = 2, ProductName = "Mouse", Quantity = 5 },
new Order { OrderId = 3, ProductName = "Keyboard", Quantity = 3 }
};

// Siparişlerdeki Quantity değerlerinin ortalamasını al
double averageQuantity = orders.Average(o => o.Quantity);
Console.WriteLine("Ortalama Quantity değeri: " + averageQuantity); //Çıktı: 3.33

First/FirstOrDefault metotları, koleksiyondaki ilk öğeyi döndürmek için kullanılır. First metodu, koleksiyon boşsa veya koşulu sağlayan hiçbir öğe bulunamazsa bir istisna (exception) fırlatırken, FirstOrDefault metodu ise varsayılan bir değer döndürür (örneğin, null ya da default değer).

List<Order> orders = new List<Order>
{
new Order { OrderId = 1, ProductName = "Laptop", Quantity = 2 },
new Order { OrderId = 2, ProductName = "Mouse", Quantity = 5 },
new Order { OrderId = 3, ProductName = "Keyboard", Quantity = 3 }
};

// Quantity'si 5 olan ilk siparişi al
Order firstOrder = orders.First(o => o.Quantity == 5);
Console.WriteLine("İlk sipariş: " + firstOrder.ProductName);
//Çıktı: "İlk sipariş: Mouse"

// Quantity'si 10 olan ilk siparişi al, yoksa varsayılan (null) döndür
Order firstOrderOrDefault = orders.FirstOrDefault(o => o.Quantity == 10);

if (firstOrderOrDefault != null)
{
Console.WriteLine("İlk sipariş: " + firstOrderOrDefault.ProductName);
}
else
{
Console.WriteLine("Kriterlere uyan sipariş bulunamadı.");
}
//Çıktı: "Kriterlere uyan sipariş bulunamadı."

Single/SingleOrDefault metotları, koleksiyondan tek bir öğe döndürmek için kullanılır. Single metodu, koşulu sağlayan tam olarak bir öğe bulunmasını bekler. Eğer koşulu sağlayan öğe bulunmazsa veya birden fazla öğe varsa bir istisna fırlatır. SingleOrDefault metodu ise, koşulu sağlayan tek bir öğe bulunmasını bekler. Eğer böyle bir öğe bulunamazsa varsayılan bir değer döndürür (örneğin, null).

List<Order> orders = new List<Order>
{
new Order { OrderId = 1, ProductName = "Laptop", Quantity = 2 },
new Order { OrderId = 2, ProductName = "Mouse", Quantity = 5 },
new Order { OrderId = 3, ProductName = "Keyboard", Quantity = 3 }
};

// Quantity'si 3 olan tek siparişi al
Order singleOrder = orders.Single(o => o.Quantity == 3);
Console.WriteLine("Sipariş: " + singleOrder.ProductName); //Çıktı: "Sipariş: Keyboard"

// Quantity'si 10 olan tek siparişi al, yoksa varsayılan (null) döndür
Order singleOrderOrDefault = orders.SingleOrDefault(o => o.Quantity == 10);

if (singleOrderOrDefault != null)
{
Console.WriteLine("Sipariş: " + singleOrderOrDefault.ProductName);
}
else
{
Console.WriteLine("Kriterlere uyan sipariş bulunamadı.");
}
//Çıktı: "Kriterlere uyan sipariş bulunamadı."

🌟Veri sorgulama işlemlerinde büyük kolaylık sağlayan LINQ hakkında temel işlevleri ve kullanım senaryolarını ele aldım. Ancak, LINQ’un sunduğu özellikler bununla sınırlı değil. Daha fazla bilgi ve fonksiyonlar için kendi araştırmanızı yaparak veri sorgulama ve işleme konusundaki bilginizi derinleştirebilir, projelerinizde daha verimli çözümler üretebilirsiniz.

🚀 Umarım bu bilgiler LINQ hakkında daha iyi bir anlayış kazanmanıza yardımcı olmuştur. Bir sonraki yazımda görüşmek üzere, iyi çalışmalar!

--

--

No responses yet