.NET-HILFE

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

Veröffentlicht 18. Februar 2024
Teilen Sie:

Sortieren ist eine grundlegende Operation in jeder Programmiersprache, und die C# OrderBy-Methode ist ein leistungsfähiges Werkzeug für die Anordnung von Elementen in Sammlungen. Egal, ob Sie mit Arrays, Listen oder anderen aufzählbaren Strukturen arbeiten, wenn Sie wissen, wie Sie OrderBy nutzen können, können Sie die Lesbarkeit und Funktionalität Ihres Codes erheblich verbessern.

Später in diesem Artikel werden wir Folgendes vorstellen IronPDF und wie wir die LINQ OrderBy-Methode und IronPDF verwenden können, um formatierte und sortierte PDFs zu erzeugen.

Was ist die LINQ OrderBy-Methode?

Die Methode OrderBy ist Teil der LINQ (Sprachintegrierte Abfrage) bibliothek in C# und ist speziell für die Sortierung von Elementen in aufsteigender Reihenfolge konzipiert, da dies die Standardmethode für die Sortierung von Daten ist, besteht keine Notwendigkeit für ein aufsteigendes Schlüsselwort.

So verwenden Sie die LINQ Orderby-Methode

Sortieren von Daten in aufsteigender Reihenfolge

In C# gibt es zwei Möglichkeiten, diese Methode anzuwenden. Durch Methodensyntax oder Abfragesyntax. Wir werden die Methodensyntax verwenden, da sie einfach zu handhaben ist:

var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
Dim sortedCollection = collection.OrderBy(Function(item) item.OrderByProperty)
VB   C#

Hier ist die Sammlung die IEnumerable'-Quellsammlung, die sortiert werden soll, undOrderByProperty` ist die Eigenschaft oder der Ausdruck, nach dem die Elemente sortiert werden sollen. Die Methode der Lambda-Ausdruckserweiterung innerhalb von "OrderBy" gibt das Sortierkriterium an.

Sortieren von Daten in absteigender Reihenfolge

Um in absteigender Reihenfolge zu sortieren, können Sie die Methode OrderByDescending unter Verwendung der methodenbasierten Syntax verwenden:

var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
Dim sortedCollectionDesc = collection.OrderByDescending(Function(item) item.OrderByProperty)
VB   C#

Sortieren von Daten nach mehreren Kriterien

In der Praxis müssen Sie häufig eine Sammlung nach mehreren Kriterien sortieren. orderBy" ermöglicht dies durch die Verkettung mehrerer "ThenBy"- oder "ThenByDescending"-Aufrufe:

var multiSortedCollection = collection
    .OrderBy(item => item.OrderByProperty1)
    .ThenByDescending(item => item.OrderByProperty2);
var multiSortedCollection = collection
    .OrderBy(item => item.OrderByProperty1)
    .ThenByDescending(item => item.OrderByProperty2);
Dim multiSortedCollection = collection.OrderBy(Function(item) item.OrderByProperty1).ThenByDescending(Function(item) item.OrderByProperty2)
VB   C#

In diesem Beispiel wird die Sammlung zunächst nach OrderByProperty1 in aufsteigender Reihenfolge sortiert und dann für Elemente mit demselben OrderByProperty1-Wert nach OrderByProperty2 in absteigender Reihenfolge sortiert.

Benutzerdefinierte Vergleicher

Für komplexere Sortieranforderungen können Sie benutzerdefinierte Vergleicher verwenden. Die Methode OrderBy erlaubt die Übergabe eines `IComparerimplementierung, wie im folgenden Beispiel gezeigt:

var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());
var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());
Dim customSortedCollection = collection.OrderBy(Function(item) item.Property, New CustomComparer())
VB   C#

Hier ist der "CustomComparer" eine Klasse, die den "IComparer" implementiert` Schnittstelle, die eine benutzerdefinierte Logik für den Vergleich von Elementen bietet.

Praktisches Beispiel: Objekte sortieren

Sortieren einer Liste von Ganzzahlen

using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 2, 8, 1, 7 };
        var sortedNumbers = numbers.OrderBy(num => num);
        Console.WriteLine("Sorted Numbers:");
        foreach (var number in sortedNumbers)
        {
            Console.WriteLine(number);
        }
    }
}
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 2, 8, 1, 7 };
        var sortedNumbers = numbers.OrderBy(num => num);
        Console.WriteLine("Sorted Numbers:");
        foreach (var number in sortedNumbers)
        {
            Console.WriteLine(number);
        }
    }
}
Imports System
Imports System.Linq
Imports System.Collections.Generic
Friend Class Program
	Shared Sub Main()
		Dim numbers As New List(Of Integer) From {5, 2, 8, 1, 7}
		Dim sortedNumbers = numbers.OrderBy(Function(num) num)
		Console.WriteLine("Sorted Numbers:")
		For Each number In sortedNumbers
			Console.WriteLine(number)
		Next number
	End Sub
End Class
VB   C#

In diesem Beispiel wird eine Liste ganzer Zahlen mit "OrderBy" in aufsteigender Reihenfolge sortiert.

Sortieren einer Liste von Strings

using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<string> names = new List<string> { "Alice", "Charlie", "Bob", "David" };
        var sortedNames = names.OrderBy(name => name);
        Console.WriteLine("Sorted Names:");
        foreach (var name in sortedNames)
        {
            Console.WriteLine(name);
        }
    }
}
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<string> names = new List<string> { "Alice", "Charlie", "Bob", "David" };
        var sortedNames = names.OrderBy(name => name);
        Console.WriteLine("Sorted Names:");
        foreach (var name in sortedNames)
        {
            Console.WriteLine(name);
        }
    }
}
Imports System
Imports System.Linq
Imports System.Collections.Generic
Friend Class Program
	Shared Sub Main()
		Dim names As New List(Of String) From {"Alice", "Charlie", "Bob", "David"}
		Dim sortedNames = names.OrderBy(Function(name) name)
		Console.WriteLine("Sorted Names:")
		For Each name In sortedNames
			Console.WriteLine(name)
		Next name
	End Sub
End Class
VB   C#

Dieses Beispiel zeigt, wie eine Liste von Zeichenketten in aufsteigender Reihenfolge alphabetisch sortiert wird.

Sortieren einer Liste von benutzerdefinierten Objekten

using System;
using System.Linq;
using System.Collections.Generic;
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        Console.WriteLine("Sorted People by Age:");
        foreach (var person in sortedPeople)
        {
            Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}");
        }
    }
}
using System;
using System.Linq;
using System.Collections.Generic;
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        Console.WriteLine("Sorted People by Age:");
        foreach (var person in sortedPeople)
        {
            Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}");
        }
    }
}
Imports System
Imports System.Linq
Imports System.Collections.Generic
Friend Class Person
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Age() As Integer
End Class
Friend Class Program
	Shared Sub Main()
		Dim people As New List(Of Person) From {
			New Person With {
				.FirstName = "John",
				.LastName = "Doe",
				.Age = 30
			},
			New Person With {
				.FirstName = "Alice",
				.LastName = "Smith",
				.Age = 25
			},
			New Person With {
				.FirstName = "Bob",
				.LastName = "Johnson",
				.Age = 35
			}
		}
		Dim sortedPeople = people.OrderBy(Function(person) person.Age)
		Console.WriteLine("Sorted People by Age:")
		For Each person In sortedPeople
			Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}")
		Next person
	End Sub
End Class
VB   C#

In diesem Beispiel wird eine Liste von benutzerdefinierten Personenobjekten auf der Grundlage der Eigenschaft Alter in aufsteigender Reihenfolge sortiert.

Die folgende Ausgabe ist in der Konsole zu sehen

C# Orderby (Wie es für Entwickler funktioniert): Abbildung 1 - Ausgabe des vorherigen Codes, der benutzerdefinierte Objekte sortiert

Handhabung von String-Vergleichen

Wenn Sie mit Zeichenketteneigenschaften arbeiten, sollten Sie die Groß- und Kleinschreibung bei der Sortierung nicht berücksichtigen:

var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);
var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);
Dim sortedPeopleByName = people.OrderBy(Function(person) person.LastName, StringComparer.OrdinalIgnoreCase)
VB   C#

In diesem Beispiel wird die Funktion "StringComparer.OrdinalIgnoreCase" verwendet, um eine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung auf der Grundlage der Eigenschaft "Nachname" durchzuführen.

Überlegungen zur Leistung

LINQ bietet zwar eine übersichtliche Möglichkeit zum Sortieren von Sammlungen, aber es ist wichtig, die Auswirkungen auf die Leistung zu berücksichtigen, insbesondere bei großen Datensätzen. Für leistungskritische Szenarien können Sie Alternativen wie das Sortieren an Ort und Stelle mit der Funktion List<T>.Sort-Methode.

Einführung in IronPDF

IronPDF ist eine C# PDF-Bibliothek von Iron Software das beim Lesen und Erstellen von PDF-Dokumenten hilft. Es kann leicht formatierte Dokumente mit Stilinformationen in PDF umwandeln. IronPDF kann auf einfache Weise PDFs aus HTML-Strings generieren, oder es kann den HTML-Code von der URL herunterladen und dann PDFs generieren.

IronPDF glänzt, wenn es um das Konvertieren geht HTML zu PDF, wobei alle Layouts und Stile beibehalten werden. Es kann PDFs aus verschiedenen Webinhalten generieren, wie zum Beispiel Berichte, Rechnungen und Dokumentationen. Das Werkzeug arbeitet mit HTML-Dateien, URLs und HTML-Zeichenfolgen, um PDF-Dateien zu erstellen.

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#

Einrichtung

IronPDF kann mit dem Befehl NuGet paketmanager-Konsole oder mit dem Visual Studio-Paketmanager.

dotnet add package IronPdf
dotnet add package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet add package IronPdf
VB   C#

Sie können IronPDF auch über den NuGet Package Manager installieren, indem Sie in der Suchleiste des NuGet Package Manager nach "ironpdf" suchen.

C# Orderby (Wie es für Entwickler funktioniert): Abbildung 2 - Installation von IronPDF über den NuGet Package Manager

Erzeugen einer PDF-Datei mit IronPDF

Nachfolgend finden Sie den Code zur Erstellung eines PDF-Berichts mithilfe eines HTML-Strings und des IronPDF-Generators

// See https://aka.ms/new-console-template for more information
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        string name = "Sam";
        var count = people.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} people sorted by Age.</p>
" +
string.Join("\n", sortedPeople.Select(person => $"{person.FirstName} {person.LastName}, Age: {person.Age}"))
+ @"
</body>
</html>";
// Create a new PDF document
        var pdfDocument = new ChromePdfRenderer();
        pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
    }
}
// See https://aka.ms/new-console-template for more information
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        string name = "Sam";
        var count = people.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} people sorted by Age.</p>
" +
string.Join("\n", sortedPeople.Select(person => $"{person.FirstName} {person.LastName}, Age: {person.Age}"))
+ @"
</body>
</html>";
// Create a new PDF document
        var pdfDocument = new ChromePdfRenderer();
        pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
    }
}
Imports Microsoft.VisualBasic

' See https://aka.ms/new-console-template for more information
Friend Class Person
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Age() As Integer
End Class
Friend Class Program
	Shared Sub Main()
		Dim people As New List(Of Person) From {
			New Person With {
				.FirstName = "John",
				.LastName = "Doe",
				.Age = 30
			},
			New Person With {
				.FirstName = "Alice",
				.LastName = "Smith",
				.Age = 25
			},
			New Person With {
				.FirstName = "Bob",
				.LastName = "Johnson",
				.Age = 35
			}
		}
		Dim sortedPeople = people.OrderBy(Function(person) person.Age)
		Dim name As String = "Sam"
		Dim count = people.Count
		Dim content As String = $"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} people sorted by Age.</p>
" & String.Join(vbLf, sortedPeople.Select(Function(person) $"{person.FirstName} {person.LastName}, Age: {person.Age}")) & "
</body>
</html>"
' Create a new PDF document
		Dim pdfDocument = New ChromePdfRenderer()
		pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf")
	End Sub
End Class
VB   C#

Hier erzeugen wir zunächst eine HTML-Zeichenkette aus "sortedPeople", die in aufsteigender Reihenfolge mit allen für die Berichte erforderlichen Formatierungen sortiert ist. Dann verwenden wir IronPDF, um ein PDF-Dokument zu erstellen. Wir verwenden die Methode "RenderHtmlAsPdf", um einen HTML-String in ein PDF-Dokument umzuwandeln.

Ausgabe

Die folgende Ausgabe ist in der PDF-Datei verfügbar.

C# Orderby (Wie es für Entwickler funktioniert): Abbildung 3 - PDF-Ausgabe des vorherigen Codes

Lizenzierung (kostenlose Testversion verfügbar)

Ein Probeschlüssel kann angefordert werden bei hier. Dieser Schlüssel muss in appsettings.json platziert werden.

"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'"IronPdf.LicenseKey": "your license key"
VB   C#

Geben Sie Ihre E-Mail-Adresse an, um eine Testlizenz zu erhalten.

Schlussfolgerung

Die OrderBy-Methode in C# ist ein vielseitiges Werkzeug zum Sortieren von Sammlungen nach verschiedenen Kriterien. Unabhängig davon, ob Sie in aufsteigender oder absteigender Reihenfolge, nach einzelnen oder mehreren Kriterien sortieren oder benutzerdefinierte Vergleicher verwenden, kann die Beherrschung von OrderBy die Klarheit und Effizienz Ihres Codes erheblich verbessern.

Zusammen mit IronPDF, ist eine hervorragende Kombination, um eine schön formatierte und sortierte Sammlung als Dokument zu erstellen.

< PREVIOUS
C# Dev Kit VS Code Extension (Wie es für Entwickler funktioniert)
NÄCHSTES >
MSTest C# (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 >