IRONSOFTWAREHOME
開發者更新

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

Jacob Mellor,首席技術官 @ Team Iron
Jacob Mellor
Updated: 2026年4月21日

在C#中,GroupBy 方法是一個強大的工具,可根據指定的鍵將資料來源的元素組織成群組。 此方法是LINQ(語言整合查詢)的一部分,可以用來按單一屬性或多個屬性對項目進行分組,使其在資料分析和操作中無價。 GroupBy 方法簡化了複雜的資料操作,允許根據特定標準高效地組織和檢索資料。 我們將在這篇部落格中討論GroupBy和IronPDF程式庫。

GroupBy 的基礎

GroupBy 方法的本質在於其能夠根據指定的鍵將給定集合的元素分類成群組。 此鍵屬性決定了項目如何分組。 例如,您可以按照年齡鍵值將學生列表分組,建立具有相同年齡的學生群組。 每個群組由一個鍵值和共享該鍵的項目集合表示。 鍵屬性可以是任何物件,例如字串、數字,甚至是匿名物件,提供了在資料分組方面的靈活性。

使用方法語法進行GroupBy

在C#中,有兩種應用GroupBy方法的方式:方法語法和查詢語法。 方法語法使用lambda 表達式來定義分組鍵,是應用GroupBy操作的一種直接方法。

請考慮以下範例,使用方法語法按年齡分組學生列表:

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()
    {
        List<Student> studentList = new List<Student>
        {
            new Student { Name = "Alice", Age = 20 },
            new Student { Name = "Bob", Age = 20 },
            new Student { Name = "Charlie", Age = 21 }
        };
        
        // Group students by their age using GroupBy
        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}");
            }
        }
    }
}

C# GroupBy(它如何為開發者工作):圖1 - 之前程式碼範例的控制台輸出

LINQ的GroupBy方法使用lambda表達式根據Age鍵值對學生進行分組。 group.Key代表年齡組,內部的foreach迴圈遍歷每個群組內的學生,並列印他們的名字。

利用查詢語法進行GroupBy

查詢語法提供了一種更具表達性的方法來執行分組操作,類似於SQL查詢。 特別是在處理複雜的資料轉換和多個分組標準時,它非常有用。 以下是如何使用查詢語法實現與之前範例相似的功能:

using System;
using System.Collections.Generic;
using System.Linq;

public static 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 }
        };
        
        // Group students by their age using query syntax
        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}");
            }
        }
    }
}

在此程式碼片段中,查詢語法根據Age對學生進行分組,與方法語法類似,但語法不同,有些人覺得更易讀。

按多鍵和屬性分組

更高級的GroupBy方法使用是根據多個鍵或屬性對資料進行分組。 此技術允許基於多個值的更詳細的資料分析和分類。 通過使用匿名物件或元組,您可以基於屬性組合對項目進行分組,為應用提供更豐富的資料結構。

範例:按姓名和年齡分組學生

考慮一種情況,您需要不僅根據年齡鍵值分組學生,還根據姓名,來識別列表中擁有相同姓名和年齡鍵值的學生。這可以通過按包含姓名和年齡的匿名型別進行分組來實現。

using System;
using System.Collections.Generic;
using System.Linq;

public static class Program
{
    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 }
        };
        
        // Group students by both Name and Age using an anonymous type as the key
        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}");
            }
        }
    }
}

在此範例中,使用匿名型別作為鍵,根據姓名和年齡對學生進行分組。 這導致每個姓名和年齡的唯一組合被表示為單獨的群組,展示了GroupBy在複雜分組場景中的靈活性。

額外的GroupBy資訊

高級GroupBy用法

當您需要按多個鍵值進行分組或希望對分組資料進行額外操作(如計數、篩選或排序)時,GroupBy變得更加強大。 您可以透過將GroupBy與其他LINQ方法結合使用,或使用匿名型別按多個屬性分組來達成此目的。

GroupBy中的延遲執行

需要注意的是,GroupBy利用延遲執行,遍歷指定鍵的項目時進行處理。 這意味著在調用GroupBy方法時,分組操作不會立刻執行。 而是當分組的資料被遍歷時(例如在foreach迴圈中),執行會被遞延。此行為高效,因為它允許進一步的查詢優化和修改,然後才進行最終資料處理。

將IronPDF導入C#專案

C# GroupBy(它如何為開發者工作):圖2 - IronPDF網頁

IronPDF是一個適用於C#的全面程式庫,允許開發者在.NET應用程式中建立、操縱和轉換PDF文件。 這個強大的工具提供了廣泛的功能,從從HTML生成PDF到編輯現有PDF文件,還有更多功能。 IronPDF簡化了將PDF功能整合到應用程式中的過程,使其成為任何需要操作PDF的專案中的寶貴資產。

IronPDF的關鍵功能是其HTML到PDF轉換,確保保留版面和樣式。 它從網頁內容生成PDF,使其非常適合報告、發票和文件。 HTML文件、URL和HTML字串都可以無縫轉換為PDF。

using IronPdf;

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

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

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

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

從分組資料生成PDF報告

讓我們擴展以前按年齡鍵值分組學生的範例。 在分組學生後,我們將使用IronPDF生成一份PDF報告,列出這些群組以及每個群組中的學生姓名。

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()
    {
        // Initialize IronPDF license if applicable
        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 }
        };
        
        // Group students by their age
        var groupedResult = studentList.GroupBy(student => student.Age);
        
        // Create HTML content for the PDF report
        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>";
        }
        
        // Initialize IronPDF renderer and generate PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        
        // Specify path to save the PDF file
        var outputPath = "StudentReport.pdf";
        pdf.SaveAs(outputPath);
        
        Console.WriteLine($"PDF report generated at {outputPath}");
    }
}

在此範例中,我們首先使用GroupBy方法根據年齡分組學生。 然後,我們建立一個HTML字串,該方法返回該字串,將此分組資料格式化為報告,為每個年齡群組設置標題,並在每個群組下列出學生名稱。然後,使用IronPDF的ChromePdfRenderer類將此HTML字串轉換為PDF文件。 產出的PDF被保存到文件中,提供了一份按年齡分組的學生的格式化報告。

輸出

以下是IronPDF生成的輸出PDF:

C# GroupBy(它如何為開發者工作):圖3 - 之前程式碼範例生成的輸出PDF

結論

C#中的GroupBy方法是根據指定鍵對資料分組的多功能強大工具。 無論您更喜歡帶有lambda表達式的方法語法還是更具描述性的查詢語法,GroupBy都可以幫助您將複雜的資料結構組織成可管理且易於理解的方式。 通過掌握GroupBy和其他LINQ方法,您可以顯著增強在C#應用程式中操作和分析資料的能力。

IronPDF提供免費試用,供想在購買前探索其功能的人使用。 對於準備將其整合到項目中的人來說,授權價格始於$999,這使其成為專業級PDF操作和生成的C#應用程式的值得投資。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰。

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

OR
bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密。
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰。
無需信用卡或帳戶建立
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.9

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999起