IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

C# Groupby (jak to działa dla programistów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 21 kwietnia 2026

W języku C# metoda GroupBy jest potężnym narzędziem, które organizuje elementy ze źródła danych w grupy na podstawie określonego klucza. Metoda ta jest częścią LINQ (Language Integrated Query) i może być używana do grupowania elementów według jednej lub wielu właściwości, co czyni ją nieocenioną przy analizie i manipulacji danymi. Metoda GroupBy upraszcza złożone operacje na danych, umożliwiając wydajną organizację i pobieranie danych na podstawie określonych kryteriów. W tym wpisie na blogu omówimy funkcję GroupBy oraz bibliotekę IronPDF.

Podstawy GroupBy

Istota metody GroupBy polega na jej zdolności do kategoryzowania elementów danej kolekcji w grupy zgodnie z określonym kluczem. Ta kluczowa właściwość określa sposób grupowania elementów. Na przykład można pogrupować listę uczniów według wartości klucza wieku, tworząc klastry uczniów w tym samym wieku. Każda grupa jest reprezentowana przez wartość klucza i zbiór elementów, które mają ten sam klucz. Właściwością kluczową może być dowolny obiekt, taki jak ciąg znaków, liczba, a nawet obiekt anonimowy, co zapewnia elastyczność w grupowaniu danych.

Używanie GroupBy ze składnią metody

W języku C# istnieją dwa sposoby zastosowania metody GroupBy: składnia metody i składnia zapytania. Składnia metody wykorzystuje wyrażenia lambda do zdefiniowania klucza grupowania i stanowi bezpośrednie podejście do zastosowania operacji GroupBy.

Rozważmy następujący przykład wykorzystujący składnię metod do pogrupowania listy uczniów według wieku:

using System;
using System.Collections.Generic;
using System.Linq;

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program
{
    public static void Main()
    {
        List<Student> studentList = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Bob", Age = 20 },
            new Student { Name = "Charlie", Age = 21 }
        };
        
        // Group students by their age using GroupBy
        var groupedResult = studentList.GroupBy(student => student.Age);
        
        foreach (var group in groupedResult)
        {
            Console.WriteLine($"Age Group: {group.Key}");
            
            foreach (var student in group)
            {
                Console.WriteLine($"Student Name: {student.Name}");
            }
        }
    }
}

C# GroupBy (Jak to działa dla programistów): Rysunek 1 - Wyjście konsoli z poprzedniego przykładu kodu

Metoda LINQ GroupBy wykorzystuje wyrażenie lambda do grupowania uczniów według wartości klucza Age. group.Key reprezentuje grupę wiekową, a wewnętrzna pętla foreach iteruje po każdym uczniu w grupie, PRINTując ich imiona.

Wykorzystanie funkcji GroupBy w składni zapytań

Składnia zapytań oferuje bardziej wyrazisty sposób wykonywania operacji grupowania, przypominający zapytania typu SQL. Jest to szczególnie przydatne w przypadku złożonych transformacji danych i wielu kryteriów grupowania. Oto jak można osiągnąć podobną funkcjonalność jak w poprzednim przykładzie, używając składni zapytań:

using System;
using System.Collections.Generic;
using System.Linq;

public static class Program
{
    public static void Main()
    {
        List<Student> studentList = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Bob", Age = 20 },
            new Student { Name = "Charlie", Age = 21 }
        };
        
        // Group students by their age using query syntax
        var groupedResult = from student in studentList
                            group student by student.Age into ageGroup
                            select new { Age = ageGroup.Key, Students = ageGroup };
                            
        foreach (var group in groupedResult)
        {
            Console.WriteLine($"Age Group: {group.Age}");
            
            foreach (var student in group.Students)
            {
                Console.WriteLine($"Student Name: {student.Name}");
            }
        }
    }
}

W tym fragmencie składnia zapytania grupuje uczniów według wieku, podobnie jak składnia metody, ale z inną składnią, którą niektórzy uważają za bardziej czytelna.

Grupowanie według wielu kluczy i właściwości

Bardziej zaawansowane wykorzystanie metody GroupBy polega na grupowaniu danych według wielu kluczy lub właściwości. Technika ta pozwala na bardziej szczegółową analizę danych i kategoryzację w oparciu o wiele wartości. Korzystając z obiektów anonimowych lub krotek, można grupować elementy na podstawie kombinacji właściwości, zapewniając bogatszą strukturę danych dla aplikacji.

Przykład: Grupowanie uczniów według imienia i wieku

Rozważmy scenariusz, w którym trzeba pogrupować uczniów nie tylko według wartości klucza wieku, ale także według imienia, aby zidentyfikować uczniów o tym samym imieniu i wartości klucza wieku na liście. Można to osiągnąć poprzez grupowanie według typu anonimowego zawierającego zarówno imię, jak i wiek.

using System;
using System.Collections.Generic;
using System.Linq;

public static class Program
{
    public static void Main()
    {
        List<Student> studentList = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Alice", Age = 21 },
            new Student { Name = "Bob", Age = 20 },
            new Student { Name = "Charlie", Age = 21 }
        };
        
        // Group students by both Name and Age using an anonymous type as the key
        var groupedResult = studentList.GroupBy(student => new { student.Name, student.Age });
        
        foreach (var group in groupedResult)
        {
            Console.WriteLine($"Group Key: Name = {group.Key.Name}, Age = {group.Key.Age}");
            
            foreach (var student in group)
            {
                Console.WriteLine($"Student Name: {student.Name}, Age: {student.Age}");
            }
        }
    }
}

W tym przykładzie uczniowie są pogrupowani według imienia i wieku przy użyciu typu anonimowego jako klucza. W rezultacie powstają grupy, w których każda unikalna kombinacja imienia i wieku jest reprezentowana jako oddzielna grupa, co pokazuje elastyczność funkcji GroupBy w złożonych scenariuszach grupowania.

Dodatkowe informacje o GroupBy

Zaawansowane wykorzystanie funkcji GroupBy

Funkcja GroupBy staje się jeszcze bardziej potężna, gdy trzeba grupować według wielu wartości klucza lub gdy chcesz wykonać dodatkowe operacje na zgrupowanych danych, takie jak liczenie, filtrowanie czy sortowanie. Można to osiągnąć, łącząc metodę GroupBy z innymi metodami LINQ lub używając typów anonimowych do grupowania według wielu właściwości.

Wykonanie odroczone w GroupBy

Należy pamiętać, że GroupBy wykorzystuje odroczone wykonywanie, przetwarzając elementy podczas iteracji według danego klucza. Oznacza to, że operacja grupowania nie jest wykonywana natychmiast po wywołaniu metody GroupBy. Zamiast tego wykonanie jest odkładane do momentu iteracji nad zgrupowanymi danymi, na przykład w pętli foreach. Takie zachowanie jest wydajne, ponieważ pozwala na dalszą optymalizację zapytań i modyfikacje przed ostatecznym przetworzeniem danych.

Wprowadzenie IronPDF do projektów C#

C# GroupBy (Jak to działa dla programistów): Rysunek 2 - strona internetowa IronPDF

IronPDF to kompleksowa biblioteka dla języka C#, która umożliwia programistom tworzenie, edycję i konwersję dokumentów PDF w aplikacjach .NET. To potężne narzędzie oferuje szeroki zakres funkcji, od generowania plików PDF z HTML po edycję istniejących plików PDF i wiele więcej. IronPDF ułatwia integrację funkcji PDF z aplikacjami, co czyni go cennym narzędziem w każdym projekcie wymagającym pracy z plikami PDF.

Kluczową funkcją IronPDF jest konwersja HTML do PDF, zapewniająca zachowanie układów i stylów. Generuje pliki PDF na podstawie treści internetowych, dzięki czemu świetnie nadaje się do tworzenia raportów, faktur i dokumentacji. Pliki HTML, adresy URL i ciągi znaków HTML można płynnie konwertować do formatu PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Generowanie raportów PDF na podstawie zgrupowanych danych

Rozszerzmy nasze poprzednie przykłady grupowania uczniów według klucza wieku. Po podziale uczniów na grupy użyjemy IronPDF do wygenerowania raportu w formacie PDF, zawierającego listę tych grup wraz z nazwiskami uczniów w każdej z nich.

using IronPdf;
using System;
using System.Collections.Generic;
using System.Linq;

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program
{
    public static void Main()
    {
        // Initialize IronPDF license if applicable
        IronPdf.License.LicenseKey = "License";
        
        List<Student> studentList = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Bob", Age = 20 },
            new Student { Name = "Charlie", Age = 21 },
            new Student { Name = "David", Age = 21 }
        };
        
        // Group students by their age
        var groupedResult = studentList.GroupBy(student => student.Age);
        
        // Create HTML content for the PDF report
        var htmlContent = "<h1>Student Report</h1>";
        
        foreach (var group in groupedResult)
        {
            htmlContent += $"<h2>Age Group: {group.Key}</h2><ul>";
            
            foreach (var student in group)
            {
                htmlContent += $"<li>{student.Name}</li>";
            }
            
            htmlContent += "</ul>";
        }
        
        // Initialize IronPDF renderer and generate PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        
        // Specify path to save the PDF file
        var outputPath = "StudentReport.pdf";
        pdf.SaveAs(outputPath);
        
        Console.WriteLine($"PDF report generated at {outputPath}");
    }
}

W tym przykładzie najpierw grupujemy uczniów według wieku za pomocą metody GroupBy. Następnie tworzymy ciąg znaków HTML, który zwraca ta metoda, formatujący te zgrupowane dane w raport, z nagłówkami dla każdej grupy wiekowej i listami nazwisk uczniów w każdej grupie. Następnie używamy klasy ChromePdfRenderer biblioteki IronPDF do konwersji tego ciągu znaków HTML na dokument PDF. Powstały plik PDF jest zapisywany, zapewniając przejrzysty raport z podziałem uczniów według wieku.

Wynik

Oto plik PDF wygenerowany przez IronPDF:

C# GroupBy (Jak to działa dla programistów): Rysunek 3 - Wyeksportowany PDF z poprzedniego przykładu kodu

Wnioski

C# GroupBy (Jak to działa dla programistów): Rysunek 4 - Plan licencyjny IronPDF

Metoda GroupBy w języku C# jest wszechstronnym i potężnym narzędziem do grupowania danych na podstawie określonych kluczy. Niezależnie od tego, czy preferujesz składnię metod z wyrażeniami lambda, czy bardziej deklaratywną składnię zapytań, GroupBy umożliwia organizowanie złożonych struktur danych w sposób przejrzysty i czytelny. Opanowując metodę GroupBy i inne metody LINQ, możesz znacznie zwiększyć swoje możliwości manipulowania danymi i analizowania ich w aplikacjach napisanych w języku C#.

IronPDF oferuje bezpłatną wersję próbną dla osób, które chcą zapoznać się z jego funkcjami przed podjęciem decyzji o zakupie. Dla tych, którzy są gotowi zintegrować to w swoich projektach, licencjonowanie zaczyna się od $999, co czyni to opłacalną inwestycją dla profesjonalnej manipulacji i generowania PDF w aplikacjach C#.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta