C# Orderby (jak to działa dla programistów)
Sortowanie jest podstawową operacją w każdym języku programowania, a metoda OrderBy w języku C# jest potężnym narzędziem do porządkowania elementów w kolekcjach. Niezależnie od tego, czy pracujesz z tablicami, listami czy innymi strukturami, które można wyliczać, zrozumienie, jak wykorzystać OrderBy, może znacznie poprawić czytelność i funkcjonalność Twojego kodu.
W dalszej części tego artykułu przedstawimy bibliotekę IronPDF firmy Iron Software oraz sposób, w jaki można wykorzystać metodę LINQ OrderBy i IronPDF do generowania sformatowanych i posortowanych plików PDF.
Czym jest metoda LINQ OrderBy?
Metoda OrderBy jest częścią biblioteki LINQ (Language-Integrated Query) w języku C# i została zaprojektowana specjalnie do sortowania elementów w porządku rosnącym; Ponieważ jest to domyślny sposób sortowania danych, nie ma potrzeby stosowania słowa kluczowego "rosnąco".
Jak korzystać z metody LINQ OrderBy
Sortowanie danych w porządku rosnącym
W języku C# istnieją dwa sposoby zastosowania tej metody: poprzez składnię metody lub składnię zapytania. Użyjemy składni metody, ponieważ jest ona prosta:
var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
Dim sortedCollection = collection.OrderBy(Function(item) item.OrderByProperty)
W tym przypadku collection to zbiór źródłowy IEnumerable, który chcesz posortować, a OrderByProperty to właściwość lub wyrażenie, według którego chcesz uporządkować elementy. Wyrażenie lambda w OrderBy określa kryterium sortowania.
Sortowanie danych w porządku malejącym
Aby posortować w porządku malejącym, można użyć metody OrderByDescending, korzystając ze składni opartej na metodach:
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
Dim sortedCollectionDesc = collection.OrderByDescending(Function(item) item.OrderByProperty)
Sortowanie danych według wielu kryteriów
W rzeczywistych sytuacjach często trzeba sortować zbiór danych na podstawie wielu kryteriów. OrderBy umożliwia to poprzez łańcuchowanie wielu wywołań ThenBy lub ThenByDescending:
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)
W tym przykładzie zbiór jest najpierw sortowany według OrderByProperty1 w porządku rosnącym. Następnie elementy o tej samej wartości OrderByProperty1 są sortowane według OrderByProperty2 w porządku malejącym.
Niestandardowe komparatory
W przypadku bardziej złożonych wymagań dotyczących sortowania można użyć niestandardowych komparatorów. Metoda OrderBy pozwala na przekazanie implementacji IComparer<t>, jak pokazano w poniższym przykładzie:
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())
W tym przypadku CustomComparer jest klasą implementującą interfejs IComparer<t>, zapewniającą niestandardową logikę porównywania elementów.
Praktyczny przykład: sortowanie obiektów
Sortowanie listy liczb całkowitych
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
W tym przykładzie lista liczb całkowitych jest sortowana w porządku rosnącym przy użyciu OrderBy.
Sortowanie listy ciągów znaków
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
Ten przykład pokazuje sortowanie listy ciągów znaków w porządku alfabetycznym rosnącym.
Sortowanie listy obiektów niestandardowych
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
W tym przykładzie lista niestandardowych obiektów Person jest sortowana według właściwości Age w porządku rosnącym.
W konsoli widoczny jest następujący wynik:

Obsługa porównań ciągów znaków
W przypadku właściwości ciągów znaków warto zapewnić sortowanie bez uwzględniania wielkości liter:
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)
W tym przykładzie użyto StringComparer.OrdinalIgnoreCase do sortowania bez uwzględniania wielkości liter na podstawie właściwości LastName.
Kwestie związane z wydajnością
Chociaż LINQ zapewnia zwięzły sposób sortowania kolekcji, należy koniecznie wziąć pod uwagę wpływ na wydajność, zwłaszcza w przypadku dużych zbiorów danych. W scenariuszach, w których kluczowa jest wydajność, warto rozważyć alternatywne rozwiązania, takie jak sortowanie na miejscu przy użyciu metody List<t>.Sort.
Przedstawiamy IronPDF
Odkryj możliwości IronPDF w bibliotece C# PDF firmy Iron Software, która pomaga odczytywać i generować dokumenty PDF. Może z łatwością konwertować sformatowane dokumenty zawierające informacje o stylach do formatu PDF. IronPDF może generować pliki PDF na podstawie ciągów znaków HTML lub pobierać kod HTML z adresu URL, a następnie generować pliki PDF.
IronPDF wyróżnia się w zakresie konwersji HTML do PDF, zachowując wszystkie układy i style. Może generować pliki PDF z różnych treści internetowych, takich jak raporty, faktury i dokumentacja. Narzędzie obsługuje pliki HTML, adresy URL i ciągi znaków HTML w celu tworzenia plików 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");
}
}
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
Instalacja
IronPDF można zainstalować za pomocą konsoli menedżera pakietów NuGet lub menedżera pakietów Visual Studio.
Install-Package IronPdf
Można również zainstalować IronPDF za pomocą menedżera pakietów NuGet, wpisując "ironpdf" w pasku wyszukiwania.

Generowanie pliku PDF za pomocą IronPDF
Poniżej znajduje się kod służący do generowania raportu PDF przy użyciu ciągu znaków HTML i generatora IronPDF:
// See https://aka.ms/new-console-template for more information
using IronPdf;
using System;
using System.Collections.Generic;
using System.Linq;
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 }
};
// Sort people by age
var sortedPeople = people.OrderBy(person => person.Age);
string name = "Sam";
var count = people.Count;
// Generate an HTML string
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 and save it
var pdfDocument = new ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
}
}
// See https://aka.ms/new-console-template for more information
using IronPdf;
using System;
using System.Collections.Generic;
using System.Linq;
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 }
};
// Sort people by age
var sortedPeople = people.OrderBy(person => person.Age);
string name = "Sam";
var count = people.Count;
// Generate an HTML string
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 and save it
var pdfDocument = new ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
}
}
' See https://aka.ms/new-console-template for more information
Imports Microsoft.VisualBasic
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Linq
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
}
}
' Sort people by age
Dim sortedPeople = people.OrderBy(Function(person) person.Age)
Dim name As String = "Sam"
Dim count = people.Count
' Generate an HTML string
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 and save it
Dim pdfDocument = New ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf")
End Sub
End Class
W tym miejscu najpierw generujemy ciąg HTML z sortedPeople, który jest posortowany w porządku rosnącym i zawiera wszystkie formatowania wymagane dla raportów. Następnie używamy IronPDF do wygenerowania dokumentu PDF. Używamy metody RenderHtmlAsPdf do konwersji ciągu HTML na dokument PDF.
Wynik
W pliku PDF dostępny jest następujący wynik:

Licencjonowanie (dostępna bezpłatna wersja próbna)
Klucz próbny można uzyskać na stronie Licencji Trial IronPDF. Ten klucz należy umieścić w pliku appsettings.json.
"IronPdf.LicenseKey": "your license key"
Podaj swój adres e-mail, aby otrzymać Licencję Trial.
Wnioski
Metoda OrderBy w języku C# jest wszechstronnym narzędziem do sortowania kolekcji na podstawie różnych kryteriów. Niezależnie od tego, czy sortujesz w porządku rosnącym czy malejącym, według jednego lub wielu kryteriów, czy też używasz niestandardowych komparatorów, opanowanie funkcji OrderBy może znacznie poprawić przejrzystość i wydajność Twojego kodu.
W połączeniu z biblioteką IronPDF do generowania dokumentów PDF stanowi to doskonałe rozwiązanie do tworzenia pięknie sformatowanych i uporządkowanych zbiorów w postaci dokumentów.
Często Zadawane Pytania
Jak działa metoda OrderBy w C#?
Metoda OrderBy w C#, będąca częścią biblioteki LINQ, sortuje elementy kolekcji w porządku rosnącym. Może być używana zarówno ze składnią metod jak i zapytań, i jest na tyle uniwersalna, że obsługuje liczby całkowite, ciągi znaków i obiekty niestandardowe.
Jak mogę posortować dane w kolejności malejącej w C#?
Aby posortować dane w kolejności malejącej w C#, można użyć metody OrderByDescending. Jest to część biblioteki LINQ i uzupełnia OrderBy dla różnych potrzeb sortowania.
Czy jest możliwość sortowania według wielu pól w C#?
Tak, w C# można sortować według wielu pól, używając OrderBy w połączeniu z ThenBy lub ThenByDescending. Pozwala to na skomplikowane kryteria sortowania, umożliwiając programistom sortowanie kolekcji na podstawie wielu atrybutów.
Czym jest porównywarka niestandardowa i jak się jej używa w sortowaniu w C#?
Porównywarka niestandardowa w C# to implementacja interfejsu IComparer, która dostarcza niestandardowej logiki do porównywania elementów podczas sortowania. Jest to przydatne do sortowania złożonych obiektów lub gdy domyślne zachowanie sortowania nie odpowiada specyficznym wymaganiom.
Jak mogę użyć IronPDF do generowania plików PDF w C#?
Można użyć IronPDF w C# do generowania plików PDF z ciągów HTML, plików lub nawet adresów URL stron. IronPDF utrzymuje układ i styl oryginalnej treści, co czyni go idealnym do tworzenia profesjonalnych dokumentów, takich jak raporty czy faktury.
Jakie są kroki instalacji IronPDF w projekcie C#?
IronPDF można zainstalować w projekcie C# przy użyciu menedżera pakietów NuGet. Możesz wykonać komendę dotnet add package IronPdf w konsoli lub użyć menedżera pakietów w Visual Studio, aby dodać go do projektu.
Jak IronPDF integruje się z C# OrderBy do generowania plików PDF?
IronPDF można zintegrować z C# OrderBy, aby tworzyć posortowane i sformatowane raporty PDF. Poprzez sortowanie kolekcji danych przy użyciu OrderBy przed renderowaniem, zapewniasz, że wyjście PDF jest zorganizowane zgodnie z kryteriami sortowania.
Czy IronPDF może konwertować adres URL strony internetowej na PDF?
Tak, IronPDF może konwertować treści webowe z adresu URL do dokumentu PDF. Zachowuje oryginalny układ i style strony, co czyni go odpowiednim do archiwizacji stron internetowych lub tworzenia wersji do druku.




