CodeBlanks Logo Icon CodeBlanks

GroupJoin

C# kursu · İleri seviye · Ders 27/83

GroupJoin ile one-to-many birleştirmeyi öğrenirsin.

GroupJoin ile hiyerarşi

GroupJoin, Join'in gruplayan halidir. Her dış elemanı, eşleşen iç elemanların bir dizisiyle eşler; eşleşme olmasa bile dış eleman sonuçta kalır. Bu, bir-çok (one-to-many) ilişkiler için idealdir.

Örnek: categories.GroupJoin(products, c => c.Id, p => p.CategoryId, (c, prods) => ...). Her kategori, ürünlerinden oluşan bir dizi ile birlikte gelir; ürünü olmayan kategori boş dizi alır ama atılmaz.

GroupJoin ne zaman kullanılır

Bir kategorinin tüm ürünlerini, bir sınıfın tüm öğrencilerini ya da bir müşterinin tüm siparişlerini listelemek istediğinde GroupJoin uygundur. Eşleşmeyen dış elemanların atılmasını istemiyorsan Join yerine bunu kullan.

Sonuç seçici, iç diziyi IEnumerable<T> olarak alır; prods.Count() ya da foreach ile elemanlarına ulaşabilirsin. Bu, SQL sol dış birleşimine (left outer join) benzer.

Uygulama Kategorileri ürünlerle grupla

Aşağıdaki categories ve products listelerini GroupJoin ile Id/CategoryId üzerinden birleştir. Her kategori için kategori adı ve ürün adedini Console.WriteLine ile yazdır.

Örnek çözümü göster
" + prods.Count()); ile birleştir. foreach ile her sonucu yazdır.
Örnek çözüm:
using System;
using System.Collections.Generic;
using System.Linq;

class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
}

class Product
{
    public string Name { get; set; }
    public int CategoryId { get; set; }
}

class Program
{
    static void Main()
    {
        var categories = new List<Category>
        {
            new Category { Id = 1, Name = "İçecek" },
            new Category { Id = 2, Name = "Tatlı" }
        };
        var products = new List<Product>
        {
            new Product { Name = "Çay", CategoryId = 1 },
            new Product { Name = "Kahve", CategoryId = 1 },
            new Product { Name = "Künefe", CategoryId = 2 }
        };
        var result = categories.GroupJoin(products, c => c.Id, p => p.CategoryId, (c, prods) => c.Name + ": " + prods.Count());
        foreach (var r in result)
        {
            Console.WriteLine(r);
        }
    }
}

Kendini test et

  1. Metodu davranışa eşle

    Join
    Yalnız eşleşen çiftler
    GroupJoin
    Dış + iç dizi
    GroupBy
    Tek diziyi grupla
    Zip
    İndeks bazlı çift
  2. GroupJoin çağrısını tamamla

    var result = categories.Group____(products, c => c.Id, p => p.CategoryId, (c, prods) => c.Name);
    Cevabı göster
    var result = categories.GroupJoin(products, c => c.Id, p => p.CategoryId, (c, prods) => c.Name);
  3. GroupJoin ne üretir?

    • Yalnız eşleşen çiftleri
    • Tek bir değer
    • Dış eleman + iç dizi
    • Sıralı bir dizi
    Cevabı göster

    Dış eleman + iç dizi — Doğru. GroupJoin her dış elemanı eşleşen iç dizisiyle verir.

İleri seviye bölümündeki tüm dersler