.NET-HILFE

C# Groupby (Wie es für Entwickler funktioniert)

Veröffentlicht 3. April 2024
Teilen Sie:

In C# wird die GroupBy-Methode ist ein leistungsfähiges Werkzeug, mit dem Elemente aus einer Datenquelle anhand eines bestimmten Schlüssels in Gruppen organisiert werden können. Diese Methode ist Teil von LINQ (Sprache Integrierte Abfrage) und kann verwendet werden, um Elemente nach einer einzelnen Eigenschaft oder mehreren Eigenschaften zu gruppieren, was für die Datenanalyse und -manipulation von unschätzbarem Wert ist. Die GroupBy-Methode vereinfacht komplexe Datenoperationen und ermöglicht eine effiziente Organisation und Abfrage von Daten auf der Grundlage bestimmter Kriterien. Wir diskutieren über Groupby und IronPDF bibliothek in diesem Blog.

Grundlagen von GroupBy

Das Wesen der GroupBy-Methode liegt in ihrer Fähigkeit, Elemente einer gegebenen Sammlung nach einem bestimmten Schlüssel in Gruppen zu kategorisieren. Diese Schlüsseleigenschaft bestimmt, wie Elemente gruppiert werden. Sie können zum Beispiel eine Liste von Schülern nach ihrem Altersschlüsselwert gruppieren und so Gruppen von Schülern mit demselben Alter bilden. Jede Gruppe wird durch einen Schlüsselwert und eine Sammlung von Elementen dargestellt, die diesen Schlüssel gemeinsam haben. Die Schlüsseleigenschaft kann ein beliebiges Objekt sein, z. B. eine Zeichenkette, eine Zahl oder sogar ein anonymes Objekt, was eine flexible Gruppierung der Daten ermöglicht.

Verwendung von GroupBy mit Methodensyntax

In C# gibt es zwei Möglichkeiten, die GroupBy-Methode anzuwenden: Methodensyntax und Abfragesyntax. Die Methodensyntax verwendet Lambda-Ausdrücke zur Definition des Gruppierungsschlüssels und ist ein direkter Ansatz zur Anwendung der GroupBy-Operation.

Im folgenden Beispiel wird die Methodensyntax verwendet, um eine Liste von Schülern nach ihrem Alter zu gruppieren:

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 }
        };
        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}");
            }
        }
    }
}
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 }
        };
        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}");
            }
        }
    }
}
Public Class Student
	Public Property Name() As String
	Public Property Age() As Integer
End Class
Public Class Program
	Public Shared Sub Main()
		Dim studentList As New List(Of Student) From {
			New Student With {
				.Name = "Alice",
				.Age = 20
			},
			New Student With {
				.Name = "Bob",
				.Age = 20
			},
			New Student With {
				.Name = "Charlie",
				.Age = 21
			}
		}
		Dim groupedResult = studentList.GroupBy(Function(student) student.Age)
		For Each group In groupedResult
			Console.WriteLine($"Age Group: {group.Key}")
			For Each student In group
				Console.WriteLine($"Student Name: {student.Name}")
			Next student
		Next group
	End Sub
End Class
VB   C#

C# Groupby (Wie es für Entwickler funktioniert): Abbildung 1 - Konsolenausgabe aus dem vorherigen Codebeispiel

Die LINQ GroupBy-Methode verwendet einen Lambda-Ausdruck, um Schüler nach ihrem Schlüsselwert Alter zu gruppieren. group.Key steht für die Altersgruppe, und die innere foreach-Schleife durchläuft alle Schüler innerhalb einer Gruppe und gibt ihre Namen aus.

Verwendung von GroupBy mit Abfragesyntax

Die Abfragesyntax bietet eine aussagekräftigere Methode zur Durchführung von Gruppierungsoperationen, die SQL-ähnlichen Abfragen ähnelt. Sie ist besonders nützlich, wenn es um komplexe Datentransformationen und mehrere Gruppierungskriterien geht. Hier sehen Sie, wie Sie mit der Abfragesyntax eine ähnliche Funktionalität wie im vorherigen Beispiel erreichen können:

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 }
    };
    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}");
        }
    }
}
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 }
    };
    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}");
        }
    }
}
Public Shared Sub Main()
	Dim studentList As New List(Of Student) From {
		New Student With {
			.Name = "Alice",
			.Age = 20
		},
		New Student With {
			.Name = "Bob",
			.Age = 20
		},
		New Student With {
			.Name = "Charlie",
			.Age = 21
		}
	}
	Dim groupedResult = From student In studentList
		Group student By student.Age Into ageGroup = Group
		Select New With {
			Key .Age = Age,
			Key .Students = ageGroup
		}
	For Each group In groupedResult
		Console.WriteLine($"Age Group: {group.Age}")
		For Each student In group.Students
			Console.WriteLine($"Student Name: {student.Name}")
		Next student
	Next group
End Sub
VB   C#

In diesem Ausschnitt gruppiert die Abfragesyntax die Schüler nach Alter, ähnlich wie bei der Methodensyntax, aber mit einer anderen Syntax, die manche für besser lesbar halten.

Gruppierung nach mehreren Schlüsseln und Eigenschaften

Eine fortgeschrittenere Verwendung der GroupBy-Methode beinhaltet die Gruppierung von Daten nach mehreren Schlüsseln oder Eigenschaften. Diese Technik ermöglicht eine detailliertere Datenanalyse und Kategorisierung auf der Grundlage mehrerer Werte. Durch die Verwendung von anonymen Objekten oder Tupeln können Sie Elemente auf der Grundlage einer Kombination von Eigenschaften gruppieren und so eine umfassendere Datenstruktur für Ihre Anwendungen bereitstellen.

Beispiel: Gruppierung von Schülern nach Name und Alter

Stellen Sie sich ein Szenario vor, in dem Sie Schüler nicht nur nach ihrem Altersschlüsselwert, sondern auch nach ihrem Namen gruppieren müssen, um Schüler mit demselben Namen und Altersschlüsselwerten in einer Liste zu identifizieren. Dies kann durch Gruppierung nach einem anonymen Typ erreicht werden, der sowohl den Namen als auch das Alter enthält.

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 }
    };
    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}");
        }
    }
}
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 }
    };
    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}");
        }
    }
}
Public Shared Sub Main()
	Dim studentList As New List(Of Student) From {
		New Student With {
			.Name = "Alice",
			.Age = 20
		},
		New Student With {
			.Name = "Alice",
			.Age = 21
		},
		New Student With {
			.Name = "Bob",
			.Age = 20
		},
		New Student With {
			.Name = "Charlie",
			.Age = 21
		}
	}
	Dim groupedResult = studentList.GroupBy(Function(student) New With {
		Key student.Name,
		Key student.Age
	})
	For Each group In groupedResult
		Console.WriteLine($"Group Key: Name = {group.Key.Name}, Age = {group.Key.Age}")
		For Each student In group
			Console.WriteLine($"Student Name: {student.Name}, Age: {student.Age}")
		Next student
	Next group
End Sub
VB   C#

In diesem Beispiel werden die Schüler nach Namen und Alter gruppiert, wobei ein anonymer Typ als Schlüssel verwendet wird. Dies führt zu Gruppen, in denen jede eindeutige Kombination von Name und Alter als separate Gruppe dargestellt wird, was die Flexibilität von GroupBy für komplexe Gruppierungsszenarien demonstriert.

Zusätzliche GroupBy-Informationen

Erweiterte GroupBy-Verwendung

GroupBy wird noch leistungsfähiger, wenn Sie nach mehreren Schlüsselwerten gruppieren müssen oder wenn Sie zusätzliche Operationen mit den gruppierten Daten durchführen möchten, wie Zählen, Filtern oder Ordnen. Sie können dies erreichen, indem Sie GroupBy mit anderen LINQ-Methoden kombinieren oder indem Sie anonyme Typen verwenden, um nach mehreren Eigenschaften zu gruppieren.

Aufgeschobene Ausführung in GroupBy

Es ist wichtig zu beachten, dass GroupBy eine verzögerte Ausführung verwendet und Elemente verarbeitet, wenn ein bestimmter Schlüssel durchlaufen wird. Das bedeutet, dass der Gruppierungsvorgang nicht sofort ausgeführt wird, wenn die GroupBy-Methode aufgerufen wird. Stattdessen wird die Ausführung aufgeschoben, bis über die gruppierten Daten iteriert wird, z. B. in einer foreach-Schleife. Dieses Verhalten ist effizient, da es weitere Abfrageoptimierungen und Änderungen ermöglicht, bevor die Daten endgültig verarbeitet werden.

Einführung von IronPDF in C# Projekte

C# Groupby (Wie es für Entwickler funktioniert): Abbildung 2 - IronPDF-Webseite

IronPDF ist eine umfassende Bibliothek für C#, die es Entwicklern ermöglicht, PDF-Dokumente in .NET-Anwendungen zu erstellen, zu bearbeiten und zu konvertieren. Dieses leistungsstarke Tool bietet eine breite Palette von Funktionen, von Erzeugung von PDFs aus HTML zur Bearbeitung vorhandener PDF-Dateien und vieles mehr. IronPDF vereinfacht die Integration von PDF-Funktionen in Ihre Anwendungen und ist damit ein wertvolles Hilfsmittel für jedes Projekt, das PDF-Bearbeitung erfordert.

Das Hauptmerkmal von IronPDF ist seine HTML zu PDF fähigkeit, um sicherzustellen, dass Layouts und Stile erhalten bleiben. Es generiert PDFs aus Webinhalten und eignet sich daher hervorragend für Berichte, Rechnungen und Dokumentationen. HTML-Dateien, URLs und HTML-Strings können nahtlos in PDFs konvertiert werden.

using IronPdf;

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

        // 1. 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");

        // 2. 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");

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

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

        // 1. 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");

        // 2. 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");

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

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

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

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

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
VB   C#

Erzeugen von PDF-Berichten aus gruppierten Daten

Erweitern wir unsere bisherigen Beispiele für die Gruppierung von Schülern nach dem Schlüsselwert Alter. Nachdem wir die Schüler in Gruppen eingeteilt haben, verwenden wir IronPDF, um einen PDF-Bericht zu erstellen, der diese Gruppen zusammen mit den Namen der Schüler in jeder Gruppe auflistet.

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()
    {
        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 }
        };
        var groupedResult = studentList.GroupBy(student => student.Age);
        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>";
        }
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        var outputPath = "StudentReport.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF report generated at {outputPath}");
    }
}
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()
    {
        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 }
        };
        var groupedResult = studentList.GroupBy(student => student.Age);
        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>";
        }
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        var outputPath = "StudentReport.pdf";
        pdf.SaveAs(outputPath);
        Console.WriteLine($"PDF report generated at {outputPath}");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Linq
Public Class Student
	Public Property Name() As String
	Public Property Age() As Integer
End Class
Public Class Program
	Public Shared Sub Main()
		IronPdf.License.LicenseKey = "License"
		Dim studentList As New List(Of Student) From {
			New Student With {
				.Name = "Alice",
				.Age = 20
			},
			New Student With {
				.Name = "Bob",
				.Age = 20
			},
			New Student With {
				.Name = "Charlie",
				.Age = 21
			},
			New Student With {
				.Name = "David",
				.Age = 21
			}
		}
		Dim groupedResult = studentList.GroupBy(Function(student) student.Age)
		Dim htmlContent = "<h1>Student Report</h1>"
		For Each group In groupedResult
			htmlContent &= $"<h2>Age Group: {group.Key}</h2><ul>"
			For Each student In group
				htmlContent &= $"<li>{student.Name}</li>"
			Next student
			htmlContent &= "</ul>"
		Next group
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
		Dim outputPath = "StudentReport.pdf"
		pdf.SaveAs(outputPath)
		Console.WriteLine($"PDF report generated at {outputPath}")
	End Sub
End Class
VB   C#

In diesem Beispiel werden die Schüler zunächst mit der Methode GroupBy nach Alter gruppiert. Anschließend wird eine HTML-Zeichenfolge erstellt, die die Methode zurückgibt und die diese gruppierten Daten in einen Bericht mit Überschriften für jede Altersgruppe und Listen mit den Namen der Schüler unter jeder Gruppe formatiert. Die Klasse ChromePdfRenderer von IronPDF wird dann verwendet, um diese HTML-Zeichenfolge in ein PDF-Dokument zu konvertieren. Das resultierende PDF wird in einer Datei gespeichert, die einen übersichtlich formatierten Bericht über die nach Alter gruppierten Schüler enthält.

Ausgabe

Hier ist die von IronPDF erzeugte PDF-Ausgabe:

C# Groupby (Wie es für Entwickler funktioniert): Abbildung 3 - Ausgegebene PDF-Datei aus dem vorherigen Codebeispiel

Schlussfolgerung

C# Groupby (Wie es für Entwickler funktioniert): Abbildung 4 - IronPDF-Lizenzierungsplan

Die GroupBy-Methode in C# ist ein vielseitiges und leistungsfähiges Werkzeug zur Gruppierung von Daten auf der Grundlage bestimmter Schlüssel. Unabhängig davon, ob Sie die Methodensyntax mit Lambda-Ausdrücken oder die deklarativere Abfragesyntax bevorzugen, können Sie mit GroupBy komplexe Datenstrukturen auf übersichtliche und lesbare Weise organisieren. Durch die Beherrschung von GroupBy und anderen LINQ-Methoden können Sie Ihre Fähigkeiten zur Bearbeitung und Analyse von Daten in Ihren C#-Anwendungen erheblich verbessern.

IronPDF bietet eine kostenlos testen für diejenigen, die sich vor dem Kauf über die Funktionen informieren möchten. Für diejenigen, die bereit sind, es in ihre Projekte zu integrieren, beginnt die Lizenzierung bei $749, was es zu einer lohnenden Investition für professionelle PDF-Bearbeitung und -Erzeugung in C#-Anwendungen macht.

< PREVIOUS
IndexOf C# (Wie es für Entwickler funktioniert)
NÄCHSTES >
C# Imap (Wie es für Entwickler funktioniert)

Sind Sie bereit, loszulegen? Version: 2024.10 gerade veröffentlicht

Gratis NuGet-Download Downloads insgesamt: 11,308,499 Lizenzen anzeigen >