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.
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
Podsumowanie
Podsumowanie: Używaj GroupBy do tworzenia grup, Join do łączenia źródeł, Aggregate do redukowania oraz typów anonimowych do tworzenia przejrzystych projekcji.
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
- GroupBy, Join, Aggregate i projekcje (typy anonimowe)
- Materializacja (ToList, ToDictionary) i uwagi dotyczące wydajności
- Wskazówki dotyczące kompozycyjności