.NET幫助 C# Orderby(對於開發者的運行原理) Jacob Mellor 更新:7月 28, 2025 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在雙子座打開 請向 Gemini 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 排序是任何程式語言的基本操作,而 C# OrderBy 方法是在集合中排列元素的強大工具。 無論是使用陣列、清單或其他可枚舉的結構,瞭解如何利用 OrderBy 可以大幅提升程式碼的可讀性和功能。 本文稍後將介紹 Iron Software 的 IronPDF 函式庫,以及我們如何使用 LINQ OrderBy 方法和 IronPDF 來產生格式化和排序的 PDF。 什麼是 LINQ OrderBy 方法? OrderBy 方法是 C# 中 LINQ(語言整合查詢)庫的一部分,專門用於以升序排列元素; 由於這是資料排序的預設方式,因此不需要升序關鍵字。 如何使用 LINQ OrderBy 方法 以升序排序資料 在 C# 中,有兩種方法可以應用此方法:透過方法語法或查詢語法。 我們將使用方法語法,因為它簡單直接: var sortedCollection = collection.OrderBy(item => item.OrderByProperty); var sortedCollection = collection.OrderBy(item => item.OrderByProperty); Dim sortedCollection = collection.OrderBy(Function(item) item.OrderByProperty) $vbLabelText $csharpLabel 這裡,collection 是您要排序的 IEnumerable 原始集合,而 OrderByProperty 則是您要藉以排序元素的屬性或表達式。 OrderBy 中的 lambda 表達式指定排序標準。 以降序排序資料 若要以降序排序,您可以使用 OrderByDescending 方法,使用基於方法的語法: var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty); var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty); Dim sortedCollectionDesc = collection.OrderByDescending(Function(item) item.OrderByProperty) $vbLabelText $csharpLabel 透過多重條件排序資料 在現實世界的情境中,您經常需要根據多項條件對一個集合進行排序。 OrderBy 可透過串接多個 ThenBy 或 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) $vbLabelText $csharpLabel 在這個範例中,集合首先以 OrderByProperty1 的升序排序。 然後,對於具有相同 OrderByProperty1 值的元素,會依 OrderByProperty2 的順序排序。 自訂比較器 對於更複雜的排序需求,您可以使用自訂的比較器。 OrderBy 方法允許您傳遞一個 IComparer<T> 實作,如以下範例所示: 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()) $vbLabelText $csharpLabel 在此,CustomComparer 是實作 IComparer<T> 介面的類別,提供比較元素的自訂邏輯。 實用範例:排序物件 整數清單排序 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 $vbLabelText $csharpLabel 在這個範例中,一個整數清單使用 OrderBy 以升序排序。 排序字串清單 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 $vbLabelText $csharpLabel 本範例示範按字母升序排序字串清單。 自訂物件清單排序 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 $vbLabelText $csharpLabel 在這個範例中,自訂 Person 物件的清單根據 Age 屬性以升序排序。 在控制台中可以看到以下輸出: 處理字串比較 在處理字串屬性時,您可能要確保不區分大小寫排序: 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) $vbLabelText $csharpLabel 此範例使用 StringComparer.OrdinalIgnoreCase 來根據 LastName 屬性執行大小寫不分的排序。 效能考量 雖然 LINQ 提供了簡潔的方式來排序集合,但必須考慮效能的影響,尤其是對於大型資料集。 對於效能關鍵的情境,您可以探索其他替代方法,例如使用 List<T>.Sort 方法就地排序。 介紹 IronPDF。 在 Iron Software 的 C# PDF 函式庫中發現 IronPDF 功能,它有助於讀取和產生 PDF 文件。 它可以將包含樣式資訊的格式化文件輕鬆轉換成 PDF。 IronPDF 可以從 HTML 字串產生 PDF,也可以從 URL 下載 HTML,然後產生 PDF。 IronPDF 在 將 HTML 轉換為 PDF 時表現出色,保留了所有版面和樣式。 它可以從各種網頁內容(如報告、發票和文件)產生 PDF。 該工具可使用 HTML 檔案、URL 和 HTML 字串來建立 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 $vbLabelText $csharpLabel 安裝 IronPdf 可使用 NuGet 套件管理員控制台 或 Visual Studio 套件管理員進行安裝。 Install-Package IronPdf 您也可以使用 NuGet Package Manager 安裝 IronPDF,方法是在搜尋列中搜尋"ironpdf"。 使用 IronPDF 生成 PDF. 以下是使用 HTML 字串和 IronPDF 生成器生成 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 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 $vbLabelText $csharpLabel 在此,我們首先從 sortedPeople 產生一個 HTML 字串,該字串以升序排序,並包含報表所需的所有格式。 然後我們使用 IronPDF 來產生 PDF 文件。 我們使用 RenderHtmlAsPdf 方法將 HTML 字串轉換為 PDF 文件。 輸出 以下是 PDF 的輸出內容: 授權(可免費試用) 可從 IronPDF Trial License 取得試用金鑰。 此 key 需要放在 appsettings.json 中。 "IronPdf.LicenseKey": "your license key" 提供您的電子郵件以取得試用授權。 結論 C# 中的 OrderBy 方法是根據各種條件對集合進行排序的通用工具。 無論您是以升序或降序、單一或多重條件排序,或是使用自訂的比較器,掌握 OrderBy 都能大幅提升程式碼的清晰度與效率。 再搭配 IronPDF 用於產生 PDF 文件的函式庫,就可以將格式精美且排序整齊的資料集產生為文件。 常見問題解答 C# OrderBy 方法如何運作? C# OrderBy 方法是 LINQ 函式庫的一部分,可將集合中的元素以升序排序。它可以與方法和查詢語法一起使用,而且用途廣泛,足以處理整數、字串和自訂物件。 如何使用 C# 對資料進行降序排序? 若要在 C# 中以降序排序資料,您可以使用 OrderByDescending 方法。這是 LINQ 函式庫的一部分,是 OrderBy 的補充,可滿足不同的排序需求。 是否可以在 C# 中根據多個欄位排序? 是的,在 C# 中,您可以使用 OrderBy 結合 ThenBy 或 ThenByDescending 來依多個欄位排序。這允許複雜的排序條件,讓開發人員可以根據多個屬性來排序集合。 什麼是自訂比較器,在 C# 排序中如何使用? C# 中的自訂比較器是 IComparer 介面的實作,可在排序過程中提供比較元素的自訂邏輯。這對於排序複雜物件或預設排序行為無法滿足特定需求時非常有用。 如何使用 IronPDF 在 C# 中生成 PDF? 您可以使用 C# 中的 IronPDF 從 HTML 字串、檔案甚至網頁 URL 生成 PDF。IronPDF 可保持原始內容的版面與風格,因此非常適合製作報告和發票等專業文件。 在 C# 專案中安裝 IronPDF 的步驟是什麼? IronPDF 可以使用 NuGet 包管理器安裝在 C# 專案中。您可以在控制台中執行 dotnet add package IronPdf 指令,或使用 Visual Studio 中的套件管理員將其新增至專案中。 IronPDF 如何與 C# OrderBy 整合以產生 PDF? IronPDF 可與 C# OrderBy 整合,以建立排序與格式化的 PDF 報表。在渲染之前使用 OrderBy 對資料集合進行排序,可確保 PDF 輸出根據您的排序條件進行組織。 IronPDF 可以將網頁 URL 轉換成 PDF 嗎? 是的,IronPDF 可以將網頁內容從 URL 轉換成 PDF 文件。它保留了網頁的原始版面和樣式,因此適合歸檔網頁或建立可列印版本。 Jacob Mellor 立即與工程團隊聊天 首席技术官 Jacob Mellor 是 Iron Software 的首席技術官,作為 C# PDF 技術的先鋒工程師。作為 Iron Software 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。Jacob 持有曼徹斯特大學土木工程一級榮譽学士工程學位(BEng) (1998-2001)。他於 1999 年在倫敦開設了他的第一家軟件公司,並於 2005 年製作了他的首個 .NET 組件,專注於解決 Microsoft 生態系統內的複雜問題。他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。 相關文章 更新12月 11, 2025 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多 更新9月 4, 2025 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新9月 4, 2025 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 C# Dev Kit VS Code 擴展(對於開發者的運行原理)MSTest C#(對於開發者的運...
更新12月 11, 2025 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多