C# (C Sharp) Ders 13 – Koleksiyonlar (Collections) – LINQ (Language Integrated Query)

Koleksiyonlar, verileri saklamak ve yönetmek için güçlü araçlardır; ancak bu veriler üzerinde sorgulama, filtreleme, sıralama gibi işlemleri yapmak bazen karmaşık olabilir. İşte burada LINQ (Language Integrated Query – Dil Entegre Sorgu) devreye girer. LINQ, C# diline entegre edilmiş bir sorgulama teknolojisidir ve koleksiyonlar üzerinde güçlü ve okunabilir sorgular yazmamızı sağlar.

LINQ, verileri nesnelerle çalışırken SQL benzeri bir sözdizimi kullanarak sorgulamamıza olanak tanır. LINQ sayesinde koleksiyonlardaki verilere erişmek, filtrelemek, sıralamak ve dönüştürmek çok daha kolay hale gelir. LINQ’un en büyük avantajlarından biri, derleme zamanında tip güvenliği sağlamasıdır; bu da çalışma zamanı hatalarını önlemeye yardımcı olur.

Temel LINQ Operatörleri

LINQ, birçok farklı sorgulama operatörü sunar. En temel ve sık kullanılanlardan bazıları şunlardır:

  • Where(): Belirli bir koşulu sağlayan elemanları filtreler.
  • Select(): Koleksiyondaki her elemanı belirli bir ifadeye göre dönüştürür.
  • OrderBy(): Koleksiyonu belirli bir özelliğe göre artan sırada sıralar.
  • OrderByDescending(): Koleksiyonu belirli bir özelliğe göre azalan sırada sıralar.
  • GroupBy(): Koleksiyondaki elemanları belirli bir anahtara göre gruplandırır.
  • Count(): Koleksiyondaki eleman sayısını döndürür.
  • Sum(): Koleksiyondaki sayısal değerlerin toplamını döndürür.
  • Average(): Koleksiyondaki sayısal değerlerin ortalamasını döndürür.
  • Min(): Koleksiyondaki en küçük değeri döndürür.
  • Max(): Koleksiyondaki en büyük değeri döndürür.

LINQ ile Koleksiyonları Filtreleme, Sıralama ve Dönüştürme Örnekleri

C#
using System;
using System.Collections.Generic;
using System.Linq; // LINQ namespace'ini eklemeyi unutmayın!

public class LinqOrnegi
{
    public static void Main(string[] args)
    {
        // Bir ürün listesi oluşturalım
        List<Urun> urunler = new List<Urun>()
        {
            new Urun { Ad = "Elma", Fiyat = 10 },
            new Urun { Ad = "Armut", Fiyat = 15 },
            new Urun { Ad = "Muz", Fiyat = 20 },
            new Urun { Ad = "Çilek", Fiyat = 25 }
        };

        // 1. Filtreleme: Fiyatı 18'den büyük olan ürünleri bulalım
        var pahaliUrunler = urunler.Where(u => u.Fiyat > 18); // Lambda ifadesi kullanıldı
        Console.WriteLine("Pahalı Ürünler:");
        foreach (var urun in pahaliUrunler)
        {
            Console.WriteLine($"{urun.Ad} - {urun.Fiyat}");
        }

        // 2. Sıralama: Ürünleri fiyata göre artan sırada sıralayalım
        var siralanmisUrunler = urunler.OrderBy(u => u.Fiyat);
        Console.WriteLine("\nSıralanmış Ürünler (Artan):");
        foreach (var urun in siralanmisUrunler)
        {
            Console.WriteLine($"{urun.Ad} - {urun.Fiyat}");
        }

        // 3. Dönüştürme: Ürünlerin sadece adlarını bir listeye alalım
        var urunAdlari = urunler.Select(u => u.Ad);
        Console.WriteLine("\nÜrün Adları:");
        foreach (string ad in urunAdlari)
        {
            Console.WriteLine(ad);
        }

        // 4. Gruplama: Ürünleri fiyatlarına göre gruplandıralım
        var gruplanmisUrunler = urunler.GroupBy(u => u.Fiyat);
        Console.WriteLine("\nGruplanmış Ürünler:");
        foreach (var grup in gruplanmisUrunler)
        {
            Console.WriteLine($"Fiyat: {grup.Key}");
            foreach (var urun in grup)
            {
                Console.WriteLine($"- {urun.Ad}");
            }
        }

    }
}

// Basit bir Urun sınıfı tanımlayalım
public class Urun
{
    public string Ad { get; set; }
    public int Fiyat { get; set; }
}

Lambda İfadeleri

LINQ sorgularında genellikle lambda ifadeleri kullanılır. Lambda ifadeleri, anonim fonksiyonlardır ve kısa bir şekilde koşulları veya dönüşümleri tanımlamamızı sağlar. Örneğin: u => u.Fiyat > 18 ifadesi, “urun” parametresinin fiyatının 18’den büyük olup olmadığını kontrol eden bir lambda ifadesidir.

LINQ Sorguları (Query Syntax)

LINQ sorgularını query syntax kullanarak da yazabiliriz. Bu sözdizimi SQL’e daha benzerdir ve bazı durumlarda daha okunabilir olabilir:

C#
var pahaliUrunlerQuery = from u in urunler
                         where u.Fiyat > 18
                         select u;

LINQ, koleksiyonlar üzerinde veri manipülasyonunu kolaylaştıran güçlü bir araçtır. LINQ sayesinde kodların daha okunabilir, bakımı kolay ve verimli hale getirilmesi mümkündür.

Kaynak: https://learn.microsoft.com/tr-tr/dotnet/csharp/tour-of-csharp/tutorials/