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 操作的直接方法。

要学习如何开始使用 IronPDF,请访问 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()
    {
        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 表达式按学生的 年龄 键值对学生进行分组。 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}");
            }
        }
    }
}

在此片段中,查询语法按 年龄 对学生进行分组,类似于方法语法,但具有不同的语法,一些人认为这种语法更具可读性。

按多个键和属性进行分组

更高级别的 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 循环中)。这种行为是有效的,因为它允许在最终处理数据之前执行进一步的查询优化和修改。

在C#项目中引入IronPDF

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开始,这对于在C#应用中进行专业级PDF操作和生成是值得的投资。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

相关文章

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 起