C# Academy · Lekcja

GroupBy, Join, Aggregate i projekcje (typy anonimowe)

Proszę grupować elementy, łączyć sekwencje, redukować je za pomocą Aggregate oraz tworzyć przejrzyste projekcje z użyciem typów anonimowych.

Lekcja 1 z 38 kroki

GroupBy, Join, Aggregate i projekcje (typy anonimowe) to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.

Przegląd zaawansowanych operatorów

W tym temacie:

  • GroupBy: tworzy grupy według klucza
  • Join: łączy dwie sekwencje według klucza
  • Aggregate: redukuje do pojedynczej wartości
  • Typy anonimowe: porządkują projekcje

Grupowanie według klucza

GroupBy tworzy grupy z właściwością Key oraz wewnętrzną sekwencją elementów mających ten sam klucz.

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    string[] words = new string[] { "ant", "cat", "tiger", "lion", "dog", "eagle" };

    var groups = words.GroupBy(w => w.Length);

    foreach (var g in groups)
    {
      Console.WriteLine("Len " + g.Key + ":");
      foreach (string w in g) Console.WriteLine(" - " + w);
    }
  }
}

Złączenie wewnętrzne według klucza

Join dopasowuje elementy z dwóch sekwencji według klucza i tworzy projekcję połączonego wyniku.

using System;
using System.Linq;

public sealed class Customer { public int Id; public string Name; public Customer(int id, string name){ Id=id; Name=name; } }
public sealed class Order    { public int CustomerId; public string Item; public Order(int cid, string item){ CustomerId=cid; Item=item; } }

public class Program
{
  public static void Main(string[] args)
  {
    var customers = new Customer[] { new Customer(1,"Ada"), new Customer(2,"Bob") };
    var orders    = new Order[]    { new Order(1,"Book"), new Order(1,"Pen"), new Order(2,"Map") };

    var joined = customers.Join(
      orders,
      c => c.Id,
      o => o.CustomerId,
      (c, o) => c.Name + " -> " + o.Item);

    foreach (string s in joined) Console.WriteLine(s);
  }
}

Podstawy agregowania

Aggregate stosuje akumulator, aby zredukować sekwencję do jednego wyniku. Należy dobrać odpowiednią wartość początkową.

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    int[] xs = new int[] { 1, 2, 3, 4 };

    // Product with seed 1
    int product = xs.Aggregate(1, (acc, n) => acc * n);
    Console.WriteLine("Product = " + product); // 24

    // Join words with a separator using seed
    string[] words = new string[] { "a", "b", "c" };
    string csv = words.Aggregate("", (acc, w) => acc == "" ? w : acc + "," + w);
    Console.WriteLine(csv); // a,b,c
  }
}

Projekcja typu anonimowego

Typów anonimowych należy używać do tworzenia przejrzystych projekcji: new { Name = c.Name, ... } lub skróconej postaci new { c.Name }.

using System;
using System.Linq;

public sealed class City { public string Name; public int Pop; public City(string n,int p){ Name=n; Pop=p; } }

public class Program
{
  public static void Main(string[] args)
  {
    var cities = new City[]
    {
      new City("Oslo", 634000),
      new City("Rome", 2873000),
      new City("Riga", 605000)
    };

    var small = cities
      .Where(c => c.Pop < 1000000)
      .Select(c => new { c.Name, Millions = (c.Pop / 1000000.0) });

    foreach (var x in small)
    {
      Console.WriteLine(x.Name + " ~ " + x.Millions + "M");
    }
  }
}

Praktyczne wskazówki

Wskazówki:

  • Po GroupBy należy iterować najpierw po grupach, a następnie po elementach.
  • Należy używać Join, gdy dostępne są dwa źródła z pasującymi kluczami.
  • W przypadku Aggregate należy dobrać odpowiednią wartość początkową.
  • Typy anonimowe mają zasięg lokalny; publiczne interfejsy API powinny zwracać konkretne DTO.

Przeznaczenie GroupBy

Szybkie sprawdzenie: Który operator LINQ grupuje elementy według klucza i zwraca sekwencję grup?

Podsumowanie

Podsumowanie: Używaj GroupBy do tworzenia grup, Join do łączenia źródeł, Aggregate do redukowania oraz typów anonimowych do tworzenia przejrzystych projekcji.

Bezpłatny start

Ucz się C# dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
93
Lekcje
346

Często zadawane pytania

Czy lekcja „GroupBy, Join, Aggregate i projekcje (typy anonimowe)” jest bezpłatna?

Tak — pełny tekst „GroupBy, Join, Aggregate i projekcje (typy anonimowe)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „GroupBy, Join, Aggregate i projekcje (typy anonimowe)”?

Proszę grupować elementy, łączyć sekwencje, redukować je za pomocą Aggregate oraz tworzyć przejrzyste projekcje z użyciem typów anonimowych. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.

Ile czasu zajmuje lekcja „GroupBy, Join, Aggregate i projekcje (typy anonimowe)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. GroupBy, Join, Aggregate i projekcje (typy anonimowe)
  2. Materializacja (ToList, ToDictionary) i uwagi dotyczące wydajności
  3. Wskazówki dotyczące kompozycyjności
← Powrót do C# Academy