LINQ: Select ve SelectMany Farkları¶
LINQ’da Select
ve SelectMany
, veri projeksiyonları yapmak için kullanılan güçlü metotlardır. Ancak bu iki metot arasında önemli farklar bulunmaktadır. Doğru metodu kullanmak, hem performans hem de kodun okunabilirliği açısından kritik öneme sahiptir.
1. Select Nedir?¶
Select
, her bir elemanı bir projeksiyondan geçirerek yeni bir koleksiyon oluşturur. Bu metot, genellikle bir koleksiyondaki elemanları dönüştürmek veya belirli özelliklerini seçmek için kullanılır.
✅ Örnek:
var names = people.Select(p => p.Name).ToList();
foreach (var name in names)
{
Console.WriteLine(name);
}
Bu örnekte, people
koleksiyonundaki Name
özellikleri alınır ve yeni bir koleksiyon oluşturulur.
2. SelectMany Nedir?¶
SelectMany
, her bir elemanın içindeki koleksiyonları düzleştirerek tek bir koleksiyon haline getirir. Bu, iç içe koleksiyonlarla çalışırken oldukça kullanışlıdır.
✅ Örnek:
var allSubjects = students.SelectMany(s => s.Subjects).ToList();
foreach (var subject in allSubjects)
{
Console.WriteLine(subject);
}
Bu örnekte, her bir öğrencinin Subjects
koleksiyonu düzleştirilerek tek bir koleksiyon haline getirilir.
3. Yanlış ve İdeal Kullanım¶
Yanlış Kullanım: Select ile düzleştirme yapmaya çalışmak¶
❌ Yanlış Kullanım:
var allSubjects = students.Select(s => s.Subjects).ToList();
foreach (var subjectList in allSubjects)
{
foreach (var subject in subjectList)
{
Console.WriteLine(subject);
}
}
Bu yöntem, her öğrencinin Subjects
listesini ayrı ayrı işler ve gereksiz bir karmaşıklık oluşturur.
İdeal Kullanım: SelectMany ile düzleştirme¶
✅ İdeal Kullanım:
var allSubjects = students.SelectMany(s => s.Subjects).ToList();
foreach (var subject in allSubjects)
{
Console.WriteLine(subject);
}
Bu yöntem, tüm Subjects
koleksiyonlarını tek bir listeye dönüştürerek daha verimli bir sonuç sağlar.
4. Select ve SelectMany Farkları¶
Özellik | Select | SelectMany |
---|---|---|
Çıktı | Koleksiyon | Düzleştirilmiş Koleksiyon |
Kullanım Alanı | Eleman projeksiyonu | İç içe koleksiyonları düzleştirme |
Performans | Daha az karmaşıklık | Büyük veri setlerinde avantajlı |
5. Dinamik Kullanım¶
✅ Örnek: Dinamik projeksiyon oluşturma
var subjectsByStudent = students
.Select(s => new { s.Name, Subjects = s.Subjects })
.ToList();
foreach (var item in subjectsByStudent)
{
Console.WriteLine($"{item.Name}: {string.Join(", ", item.Subjects)}");
}