.NET 帮助

C# Enumerable(开发人员如何使用)

发布 2025年一月14日
分享:

介绍

C# 的 IEnumerable接口是.NET框架中最通用的工具之一,使开发人员能够以高度灵活的方式处理集合。 结合时IronPDFIEnumerable 可用于动态数据操作和高效的 PDF 生成,非常适合创建报告、导出数据或从数据库查询生成文档等场景。

使用IEnumerable可确保您的应用程序保持可扩展性和内存效率,因为它以惰性方式处理数据,避免一次将整个数据集加载到内存中。 这对于处理庞大数据集合的大型应用程序尤其有用,例如一个巨大的数据库表。

什么是IronPDF?

C# Enumerable(开发人员如何使用):图1

IronPDF 是一个功能强大的 .NET 库,旨在简化以编程方式创建、编辑和管理 PDF 文件的过程。 它提供了多种功能,包括HTML到PDF转换、文本提取、PDF合并等。 通过将IronPDF集成到您的C#项目中,您可以高效处理复杂的PDF任务,而无需深入研究PDF的内部知识。

IronPDF 还支持多种格式,允许您从原始 HTML、Razor 视图、ASP.NET 网页,甚至直接从数据结构生成 PDF。 这种灵活性使其成为开发人员构建现代数据驱动应用程序的必备工具。

入门

安装 IronPDF

要在您的项目中使用IronPDF,请按照以下步骤操作:

通过 NuGet 包管理器控制台

  1. 在 Visual Studio 中打开您的 .NET 项目。

    1. 在工具下拉菜单下打开 NuGet 包管理器控制台。

    C# Enumerable(开发人员如何使用):图2

  2. 运行以下命令
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
VB   C#

通过解决方案的NuGet包管理器

  1. 在您的 Visual Studio 项目中,转到 工具 > NuGet 包管理器 > 为解决方案管理 NuGet 包

    1. 搜索 IronPDF

    C# Enumerable(对开发人员的工作原理):图 3

    1. 单击“安装”以开始将 IronPDF 包安装到您的项目中。

    C# Enumerable(其工作原理对开发者):图 4

C# 中 Enumerable 的基本概念

IEnumerable 接口表示一个可以枚举的元素序列。 常见示例包括数组、列表和 LINQ 查询结果。 通过利用 LINQ,您可以在使用 IronPDF 生成 PDF 之前,将数据过滤、排序和投影到所需的格式。

IEnumerable 的一个关键优势是其延迟执行模型,该模型允许查询仅在访问其结果时才执行。 这能够实现高效的数据操作并减少复杂工作流程中的计算开销。

此外,该列表实现 IEnumerable 这意味着任何类似 List可以将视为IEnumerable,便于进行LINQ操作、过滤和转换。

实际应用案例

从可枚举数据生成PDF

示例:将对象列表导出为PDF表格

假设你有一个实现了 IEnumerable 的员工列表,您需要将其导出为 PDF 表格。 使用IEnumerable和IronPDF,您可以使用迭代器方法遍历数据并将其转换为结构良好的PDF。

为了提升展示效果,您可以使用带有内联CSS的HTML表格,根据数据动态地设置行和列的样式。 这可确保 PDF 输出既具功能性又具视觉吸引力。

在生成PDF之前过滤和转换数据

示例:使用 LINQ 选择和格式化数据

通过 LINQ,您可以在将数据传递给 IronPDF 之前对其进行筛选和转换。 例如,您可以仅筛选活跃员工,并将他们的名字格式化为大写,用于PDF输出。

var activeEmployees = employees.Where(e => e.IsActive).Select(e => new {
    Name = e.Name.ToUpper(),
    Position = e.Position,
    Age = e.Age
});
var activeEmployees = employees.Where(e => e.IsActive).Select(e => new {
    Name = e.Name.ToUpper(),
    Position = e.Position,
    Age = e.Age
});
Dim activeEmployees = employees.Where(Function(e) e.IsActive).Select(Function(e) New With {
	Key .Name = e.Name.ToUpper(),
	Key .Position = e.Position,
	Key .Age = e.Age
})
VB   C#

然后,可以将此转换后的数据转换为适合 PDF 的 HTML 格式以进行渲染。

从枚举批量生成PDF

示例:从集合创建多个PDF文件

如果你需要为集合类中的每个记录生成单独的PDF,可以使用foreach循环遍历可枚举对象并动态生成单个PDF。 这在创建发票、证书或个性化报告时特别有用。

foreach (var employee in employees)
{
    string html = $"<h1>{employee.Name}</h1><p>Position: {employee.Position}</p><p>Age: {employee.Age}</p>";
    var pdf = Renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"{employee.Name}_Report.pdf");
}
foreach (var employee in employees)
{
    string html = $"<h1>{employee.Name}</h1><p>Position: {employee.Position}</p><p>Age: {employee.Age}</p>";
    var pdf = Renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"{employee.Name}_Report.pdf");
}
For Each employee In employees
	Dim html As String = $"<h1>{employee.Name}</h1><p>Position: {employee.Position}</p><p>Age: {employee.Age}</p>"
	Dim pdf = Renderer.RenderHtmlAsPdf(html)
	pdf.SaveAs($"{employee.Name}_Report.pdf")
Next employee
VB   C#

枚举扩展方法

在C#中,扩展方法是一种强大的方式,可以在不修改其源代码的情况下为现有类型添加功能。 您可以创建扩展方法,以简化对IEnumerable或List的操作。

例如,让我们创建一个扩展方法来获取可枚举集合的第一个元素。

public static class EnumerableExtensions
{
    public static T FirstOrDefaultElement<T>(this IEnumerable<T> collection)
    {
        return collection?.FirstOrDefault();
    }
}
public static class EnumerableExtensions
{
    public static T FirstOrDefaultElement<T>(this IEnumerable<T> collection)
    {
        return collection?.FirstOrDefault();
    }
}
Public Module EnumerableExtensions
	<System.Runtime.CompilerServices.Extension> _
	Public Function FirstOrDefaultElement(Of T)(ByVal collection As IEnumerable(Of T)) As T
		Return collection?.FirstOrDefault()
	End Function
End Module
VB   C#

逐步实施

设置项目

代码片段:在C#中初始化IronPDF

首先设置您的项目并初始化IronPDF和ChromePdfRenderer类:

using IronPdf;
ChromePdfRenderer renderer = new ChromePdfRenderer();
using IronPdf;
ChromePdfRenderer renderer = new ChromePdfRenderer();
Imports IronPdf
Private renderer As New ChromePdfRenderer()
VB   C#

将枚举转换为PDF内容

代码片段:迭代和格式化数据为HTML

将您的可枚举数据准备为一个HTML字符串:

var employees = new List<Employee>
{
    new Employee { Name = "John Doe", Position = "Developer", Age = 30 },
    new Employee { Name = "Jane Smith", Position = "Designer", Age = 25 }
};
string html = "<table style='width:100%; border: 1px solid black;'>" +
              "<tr><th>Name</th><th>Position</th><th>Age</th></tr>";
foreach (var employee in employees)
{
    html += $"<tr><td>{employee.Name}</td><td>{employee.Position}</td><td>{employee.Age}</td></tr>";
}
html += "</table>";
var employees = new List<Employee>
{
    new Employee { Name = "John Doe", Position = "Developer", Age = 30 },
    new Employee { Name = "Jane Smith", Position = "Designer", Age = 25 }
};
string html = "<table style='width:100%; border: 1px solid black;'>" +
              "<tr><th>Name</th><th>Position</th><th>Age</th></tr>";
foreach (var employee in employees)
{
    html += $"<tr><td>{employee.Name}</td><td>{employee.Position}</td><td>{employee.Age}</td></tr>";
}
html += "</table>";
Dim employees = New List(Of Employee) From {
	New Employee With {
		.Name = "John Doe",
		.Position = "Developer",
		.Age = 30
	},
	New Employee With {
		.Name = "Jane Smith",
		.Position = "Designer",
		.Age = 25
	}
}
Dim html As String = "<table style='width:100%; border: 1px solid black;'>" & "<tr><th>Name</th><th>Position</th><th>Age</th></tr>"
For Each employee In employees
	html &= $"<tr><td>{employee.Name}</td><td>{employee.Position}</td><td>{employee.Age}</td></tr>"
Next employee
html &= "</table>"
VB   C#

代码片段:将HTML渲染为PDF

将HTML转换为PDF:

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Employees.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Employees.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Employees.pdf")
VB   C#

完整代码示例

现在我们已经深入了解了如何使用C#的Enumerable类与IronPDF生成PDF文件,接下来我们来看一个完整的示例代码,其中我们使用这些工具生成了一个新的动态PDF文档。

using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;
public class Employee
{
    public string Name { get; set; }
    public string Position { get; set; }
    public int Age { get; set; }
}
public class Program
{
    public static void Main(string[] args)
    {
        // Sample employee data
        var employees = new List<Employee>
            {
                new Employee { Name = "John Doe", Position = "Developer", Age = 30 },
                new Employee { Name = "Jane Smith", Position = "Designer", Age = 25 },
                new Employee { Name = "Sam Wilson", Position = "Manager", Age = 35 }
            };
        // Filter and sort data using LINQ
        var filteredEmployees = employees
            .Where(e => e.Age >= 25)
            .OrderBy(e => e.Name)
            .ToList();
        // Generate HTML for the PDF
        string html = "<h1 style='text-align:center;'>Employee Report</h1>" +
                      "<table style='width:100%; border-collapse: collapse;'>" +
                      "<tr style='background-color: #f2f2f2;'>" +
                      "<th style='border: 1px solid black; padding: 8px;'>Name</th>" +
                      "<th style='border: 1px solid black; padding: 8px;'>Position</th>" +
                      "<th style='border: 1px solid black; padding: 8px;'>Age</th></tr>";
        foreach (var employee in filteredEmployees)
        {
            html += $"<tr>" +
                    $"<td style='border: 1px solid black; padding: 8px;'>{employee.Name}</td>" +
                    $"<td style='border: 1px solid black; padding: 8px;'>{employee.Position}</td>" +
                    $"<td style='border: 1px solid black; padding: 8px;'>{employee.Age}</td>" +
                    $"</tr>";
        }
        html += "</table>";
        // Initialize ChromePdfRenderer
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Render the HTML to PDF
        try
        {
            var pdf = renderer.RenderHtmlAsPdf(html);
            string outputPath = "EmployeeReport.pdf";
            pdf.SaveAs(outputPath);
            Console.WriteLine($"PDF generated successfully at: {outputPath}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF: {ex.Message}");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;
public class Employee
{
    public string Name { get; set; }
    public string Position { get; set; }
    public int Age { get; set; }
}
public class Program
{
    public static void Main(string[] args)
    {
        // Sample employee data
        var employees = new List<Employee>
            {
                new Employee { Name = "John Doe", Position = "Developer", Age = 30 },
                new Employee { Name = "Jane Smith", Position = "Designer", Age = 25 },
                new Employee { Name = "Sam Wilson", Position = "Manager", Age = 35 }
            };
        // Filter and sort data using LINQ
        var filteredEmployees = employees
            .Where(e => e.Age >= 25)
            .OrderBy(e => e.Name)
            .ToList();
        // Generate HTML for the PDF
        string html = "<h1 style='text-align:center;'>Employee Report</h1>" +
                      "<table style='width:100%; border-collapse: collapse;'>" +
                      "<tr style='background-color: #f2f2f2;'>" +
                      "<th style='border: 1px solid black; padding: 8px;'>Name</th>" +
                      "<th style='border: 1px solid black; padding: 8px;'>Position</th>" +
                      "<th style='border: 1px solid black; padding: 8px;'>Age</th></tr>";
        foreach (var employee in filteredEmployees)
        {
            html += $"<tr>" +
                    $"<td style='border: 1px solid black; padding: 8px;'>{employee.Name}</td>" +
                    $"<td style='border: 1px solid black; padding: 8px;'>{employee.Position}</td>" +
                    $"<td style='border: 1px solid black; padding: 8px;'>{employee.Age}</td>" +
                    $"</tr>";
        }
        html += "</table>";
        // Initialize ChromePdfRenderer
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Render the HTML to PDF
        try
        {
            var pdf = renderer.RenderHtmlAsPdf(html);
            string outputPath = "EmployeeReport.pdf";
            pdf.SaveAs(outputPath);
            Console.WriteLine($"PDF generated successfully at: {outputPath}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF: {ex.Message}");
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports IronPdf
Public Class Employee
	Public Property Name() As String
	Public Property Position() As String
	Public Property Age() As Integer
End Class
Public Class Program
	Public Shared Sub Main(ByVal args() As String)
		' Sample employee data
		Dim employees = New List(Of Employee) From {
			New Employee With {
				.Name = "John Doe",
				.Position = "Developer",
				.Age = 30
			},
			New Employee With {
				.Name = "Jane Smith",
				.Position = "Designer",
				.Age = 25
			},
			New Employee With {
				.Name = "Sam Wilson",
				.Position = "Manager",
				.Age = 35
			}
		}
		' Filter and sort data using LINQ
		Dim filteredEmployees = employees.Where(Function(e) e.Age >= 25).OrderBy(Function(e) e.Name).ToList()
		' Generate HTML for the PDF
		Dim html As String = "<h1 style='text-align:center;'>Employee Report</h1>" & "<table style='width:100%; border-collapse: collapse;'>" & "<tr style='background-color: #f2f2f2;'>" & "<th style='border: 1px solid black; padding: 8px;'>Name</th>" & "<th style='border: 1px solid black; padding: 8px;'>Position</th>" & "<th style='border: 1px solid black; padding: 8px;'>Age</th></tr>"
		For Each employee In filteredEmployees
			html &= $"<tr>" & $"<td style='border: 1px solid black; padding: 8px;'>{employee.Name}</td>" & $"<td style='border: 1px solid black; padding: 8px;'>{employee.Position}</td>" & $"<td style='border: 1px solid black; padding: 8px;'>{employee.Age}</td>" & $"</tr>"
		Next employee
		html &= "</table>"
		' Initialize ChromePdfRenderer
		Dim renderer As New ChromePdfRenderer()
		' Render the HTML to PDF
		Try
			Dim pdf = renderer.RenderHtmlAsPdf(html)
			Dim outputPath As String = "EmployeeReport.pdf"
			pdf.SaveAs(outputPath)
			Console.WriteLine($"PDF generated successfully at: {outputPath}")
		Catch ex As Exception
			Console.WriteLine($"Error generating PDF: {ex.Message}")
		End Try
	End Sub
End Class
VB   C#

输出 PDF

C# Enumerable(开发人员如何使用):图 5

代码解释

此 C# 程序旨在使用 IronPDF 库生成筛选员工数据的 PDF 报告。 上述代码首先定义了一个Employee类,其中包括Name、Position和Age属性,代表单个员工记录。

创建了一个示例员工数据列表,包括三个具有不同姓名、职位和年龄的员工对象。 然后,程序使用 LINQ 过滤此列表,仅选择年龄在 25 岁或以上的员工,并按姓名字母顺序排序。 此过滤和排序后的列表存储在filteredEmployees变量中。

接下来,程序构建一个用于生成PDF的HTML字符串。 它以一个标题和表格结构开始,定义了名称、职位和年龄的列标题。 然后,它遍历过滤后的员工列表,动态生成每个员工信息的表格行。 生成的HTML通过IronPDF创建PDFChromePdfRenderer.

上面的示例有效地演示了如何使用IronPDF从动态生成的HTML生成PDF,展示LINQ在筛选和排序数据方面的强大功能,并在PDF生成过程中优雅地处理异常。

性能提示和最佳实践

优化可枚举操作

使用 LINQ 优化对数据的过滤和转换。 例如

var filteredEmployees = employees.Where(e => e.Age > 25).OrderBy(e => e.Name);
var filteredEmployees = employees.Where(e => e.Age > 25).OrderBy(e => e.Name);
Dim filteredEmployees = employees.Where(Function(e) e.Age > 25).OrderBy(Function(e) e.Name)
VB   C#

通过有效链接LINQ方法来减少冗余操作。 这提高了性能,尤其是在处理大型数据集时。

高效内存使用与大型数据集

对于大型数据集,考虑将数据流分为较小的块以避免内存开销。 利用 yield return 懒惰地生成非泛型集合数据,确保内存的高效使用。

IEnumerable<Employee> GetEmployees() {
    foreach (var employee in database.GetAllEmployees()) {
        yield return employee;
    }
}
IEnumerable<Employee> GetEmployees() {
    foreach (var employee in database.GetAllEmployees()) {
        yield return employee;
    }
}
Private Iterator Function GetEmployees() As IEnumerable(Of Employee)
	For Each employee In database.GetAllEmployees()
		Yield employee
	Next employee
End Function
VB   C#

PDF生成中的错误处理

将您的PDF生成逻辑包装在try-catch块中以优雅地处理错误:

try
{
    var pdf = Renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (IronPdf.Exceptions.PdfException ex)
{
    Console.WriteLine($"PDF Error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"General Error: {ex.Message}");
}
try
{
    var pdf = Renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (IronPdf.Exceptions.PdfException ex)
{
    Console.WriteLine($"PDF Error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"General Error: {ex.Message}");
}
Try
	Dim pdf = Renderer.RenderHtmlAsPdf(html)
	pdf.SaveAs("output.pdf")
Catch ex As IronPdf.Exceptions.PdfException
	Console.WriteLine($"PDF Error: {ex.Message}")
Catch ex As Exception
	Console.WriteLine($"General Error: {ex.Message}")
End Try
VB   C#

记录错误并提供用户友好的反馈可以显著提高应用程序的稳健性。

结论

C# 的 IEnumerable 与...的集成IronPDF开启了一种高效灵活的方式,以编程方式生成专业的PDF。 通过利用 IEnumerable,您可以简化数据的转换和格式化,同时利用 IronPDF 的丰富功能集生成高质量的文档。 无论您是导出数据报告、创建发票,还是生成个性化内容,此组合都能确保可扩展性、性能和易用性。

我们鼓励开发者探索 IronPDF 的更多高级功能,例如嵌入多媒体或保护 PDF,以进一步提升他们的文档自动化工作流程。 有关更多见解、教程和支持,请参阅IronPDF文档.

< 前一页
C# 并行 Foreach(开发者如何使用)
下一步 >
C# 事件(开发人员的工作原理)