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.