Dataları Dönüştürmek için LINQ Operatörleri ve Metot Kullanımı

LINQ (Language Integrated Query), diziler, listeler, koleksiyonlar, veri tabanları ve daha fazlası gibi çeşitli veri kaynaklarından veri sorgulamak için tutarlı ve sezgisel sözdizimi yazmak için C# tarafından sağlanan bir dil özelliğidir.

LINQ’in önemli işlevlerinden bazıları şunlardır:

  • Filtering
  • Sorting
  • Transforming
  • Grouping
  • Joining
  • Aggregation

Bu makalede, bir LINQ sorgusunun öğelerini bir türden diğerine dönüştürmek için kullanılabilecek metotlar veya sorgu işleçleri hakkında bilgiler edineceğiz.

Projection (Listeleme) Query Operatörleri

Select

Bu method, belirlediğimiz bir projection işlevine dayalı olarak, sorgu öğelerinin her bir öğesini, aynı sayıda dönüştürülmüş öğeyi içeren çıktı listesine dönüştürmek için kullanılır.

Örnek:

using System;
internal class Program
{
    public static void Main(String[] args)
    {
        // Liste
        var numbers = new List<int> { 1, 2, 3, 4, 5 };

        // Listenin öğelerini yansıtmak için Select metodunun kullanımı
        var squaredNumbers = numbers.Select(x => x * x);

        // Dönüştürülen sorgunun öğelerinin çıktısı
        foreach (var num in squaredNumbers)
        {
            Console.WriteLine(num);
        }
    }
}

Sonuç:

1
4
9
16
25

SelectMany

Bu metot, dizileri veya koleksiyonlarını içeren bir LINQ sorgusunun öğelerini listelemek için kullanılır. SelectMany metodu, sorgudaki her öğe için geçerlidir ve tek bir sıra halinde listeler.

Örnek:

using System;
internal class Program
{
    public static void Main(String[] args)
    {
        // Listenin içinde liste tanımlıyoruz.
        var numbers = new List<List<int>>
        {
            new List<int> { 1, 2, 3 },
            new List<int> { 4, 5, 6 },
            new List<int> { 7, 8, 9 },
        };

        // SelectMany ile Tüm listenin içerisinde bir listeleme işlemi gerçekleştiriyoruz.
        var flattenedNumbers = numbers.SelectMany(x => x);

        foreach (var num in flattenedNumbers)
        {
            Console.WriteLine(num);
        }
    }
}

Sonuç:

1
2
3
4
5
6
7
8
9

Restriction (Koşul) Query Operatörleri

Where

Bu metot, belirttiğimiz bir koşula göre bir LINQ sorgusunun öğelerini filtrelemek ve döndürmek için kullanılır. Where metodunun çıktısı, yalnızca belirli bir eylemle eşleşen öğeleri içerir. Öğelerin kendileri değiştirilmez.

Örnek:

using System;
internal class Program
{
    public static void Main(String[] args)
    {
        // Liste
        var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        // Where koşulu ile listeleme
        var evenNumbers = numbers.Where(x => x % 2 == 0);

        foreach (var num in evenNumbers)
        {
            Console.WriteLine(num);
        }
    }
}

Sonuç:

2
4
6
8

Partitioning (Sayfalama) Query Operatörleri

Bu metotlar, bir LINQ sorgusunun başlangıcından itibaren veya bir koşul doğruyken belirli sayıda öğeyi listelemek için kullanılır.

  • Take: Bu metot, sorgunun başlangıcından itibaren belirtilen sayıda öğeye sahip listeyi döndürür.
  • TakeWhile: Bu metot, belirtilen bir koşul eşleştiğinde sorgunun başlangıcındaki öğeleri döndürür.

Örnek:

using System;
internal class Program
{
    public static void Main(String[] args)
    {
        // Liste
        var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        // Listenin ilk 3 öğesini döndürmek için Take metodunu kullanın.
        var firstThreeNumbers = numbers.Take(3);

        Console.WriteLine("Take method:");

        foreach (var num in firstThreeNumbers)
        {
            Console.WriteLine(num);
        }

        // Listenin öğelerini döndürmek için TakeWhile metodunu kullanın
        // Elemanlar 3'ten küçük veya 3'e eşitken
        var numbersLessThanOrEqualToThree = numbers.TakeWhile(x => x <= 3);

        Console.WriteLine("TakeWhile method:");

        // Output the elements of the taken query
        foreach (var num in numbersLessThanOrEqualToThree)
        {
            Console.WriteLine(num);
        }
    }
}

Sonuç:

Take method:
1
2
3
TakeWhile method:
1
2
3
  • Skip: Bu metot, sorgunun başlangıcından itibaren belirtilen sayıda öğeyi atlayan çıktı sırasını döndürür.
  • SkipWhile: Bu metot, verilen eylem eşleştirilirken sorgunun başlangıcındaki öğeleri atlayan çıktı sırasını döndürür. Skip ve SkipWhile metotları, bir sorgudan belirli bir öğe aralığını döndürmek için genellikle Take ve TakeWhile metotlarıyla birlikte kullanılır.

Örnek:

using System;
internal class Program
{
    public static void Main(String[] args)
    {
        // Liste
        var numbers = new List<int> { 1, 2, 3, 4, 5 };

        // Listenin ilk 3 öğesini atlamak için Skip metodunu kullanın.
        var numbersAfterThree = numbers.Skip(3);

        foreach (var num in numbersAfterThree)
        {
            Console.WriteLine(num);
        }

        // Listenin öğelerini atlamak için SkipWhile metodunu kullanın
        // elemanlar 3'ten küçük veya 3'e eşitken
        numbersAfterThree = numbers.SkipWhile(x => x <= 3);

        foreach (var num in numbersAfterThree)
        {
            Console.WriteLine(num);
        }
    }
}

Sonuç:

4
5
4
5

Set Operatörü

Distinct

Bu metot, bir LINQ sorgusundan yinelenen öğeleri kaldırmak için kullanılır. Distinct metodu, belirttiğimiz bir varsayılan eşitlik karşılaştırıcısı veya özel bir karşılaştırıcı kullanarak sorgunun öğelerini karşılaştırır ve orijinal sorgunun yalnızca benzersiz öğelerini içeren yeni bir sorgu döndürür.

Örnek:

using System;
internal class Program
{
    public static void Main(String[] args)
    {
        // Liste
        var numbers = new List<int> { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 };

        // Yinelenen verileri kaldırmak için Distinct metot kullanın
        var uniqueNumbers = numbers.Distinct();

        // Output the elements of the distinct query
        foreach (var num in uniqueNumbers)
        {
            Console.WriteLine(num);
        }
    }
}

Sonuç:

1
2
3
4
5

Daha detaylı LINQ Sorguları için aşağıda ki linkleri kullanabilirsiniz. Umarım makalem faydalı olmuştur.