跳過到頁腳內容
.NET幫助

C# Orderby(對於開發者的運行原理)

排序是一個基本的程式語言操作,C#的OrderBy方法是排列集合內元素的強大工具。 無論您是在處理數組、列表或其他可枚舉的結構,瞭解如何利用OrderBy都能大大提高您的程式碼的可讀性和功能性。

在本文的後面,我們將介紹Iron Software的IronPDF程式庫以及如何使用LINQ的OrderBy方法和IronPDF生成格式化和排序的PDF。

什麼是LINQ的OrderBy方法?

OrderBy方法是C#中LINQ (Language-Integrated Query) 程式庫的一部分,專門用於按升序排列元素; 由於這是排序資料的預設方式,因此不需要升序關鍵字。

如何使用LINQ的OrderBy方法

按升序排序資料

在C#中,可以用兩種方式應用此方法:方法語法或查詢語法。 我們將使用方法語法,因為它簡潔明瞭:

var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
$vbLabelText   $csharpLabel

在這裡,OrderByProperty是您希望排序元素的屬性或表達式。 在OrderBy中的lambda表達式指定了排序的標準。

按降序排序資料

為了按降序排序,您可以使用OrderByDescending方法,採用方法基礎語法:

var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
$vbLabelText   $csharpLabel

按多個標準排序資料

在現實世界的情境中,您經常需要根據多個標準對集合進行排序。 ThenByDescending調用來達成這一點:

var multiSortedCollection = collection
    .OrderBy(item => item.OrderByProperty1)
    .ThenByDescending(item => item.OrderByProperty2);
var multiSortedCollection = collection
    .OrderBy(item => item.OrderByProperty1)
    .ThenByDescending(item => item.OrderByProperty2);
$vbLabelText   $csharpLabel

在這個範例中,首先按照OrderByProperty1升序排序集合。 然後,對於具有相同OrderByProperty2降序排序。

自定義比較器

對於更複雜的排序需求,您可以使用自定義比較器。 IComparer<t>實作,如下例所示:

var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());
var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());
$vbLabelText   $csharpLabel

在這裡,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);
        }
    }
}
$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);
        }
    }
}
$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}");
        }
    }
}
$vbLabelText   $csharpLabel

在這個範例中,基於Person物件列表按升序排列。

以下輸出將在控制台中顯示:

C# Orderby(開發者如何工作的方式):圖1 - 前面代碼排序自定義對象的輸出

處理字串比較

處理字串屬性時,您可能想要確保無視大小寫進行排序:

var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);
var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);
$vbLabelText   $csharpLabel

此範例使用LastName屬性的無視大小寫排序。

效能考量

雖然LINQ提供了一種簡明的方法來排序集合,但尤其是對於大型資料集來說,考慮性能影響是必要的。 對於對性能要求較高的場景,您可能會探索諸如使用List<t>.Sort方法進行就地排序的替代方案。

介紹IronPDF

發現C#的IronPDF程式庫中的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");
    }
}
$vbLabelText   $csharpLabel

安裝

IronPDF可以通過NuGet程序包管理器控制台或使用Visual Studio程序包管理器來安裝。

Install-Package IronPdf

您也可以通過在搜索欄中搜尋"ironpdf"使用NuGet包管理器安裝IronPDF。

C# Orderby(開發者如何工作的方式):圖2 - 通過NuGet包管理器安裝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");
    }
}
$vbLabelText   $csharpLabel

這裡我們首先從sortedPeople生成HTML字符串,該字符串按照升序排序,具備報告所需的所有格式。 然後我們使用IronPDF生成PDF文件。 我們使用RenderHtmlAsPdf方法將HTML字符串轉換為PDF文件。

輸出

以下輸出可以在PDF中看到:

C# Orderby(開發者如何工作的方式):圖3 - 前面代碼的輸出PDF

授權 (提供免費試用)

可以從IronPDF試用授權獲取試用密鑰。 此密鑰需要放置在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 字串、文件甚至 Web 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, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我