AYUDA .NET

C# Enumerable (Cómo funciona para desarrolladores)

Publicado en 14 de enero, 2025
Compartir:

Introducción

IEnumerable de C#La interfaz es una de las herramientas más versátiles en el .NET Framework, lo que permite a los desarrolladores trabajar con colecciones de una manera altamente flexible. Cuando se combina con IronPDFIEnumerable permite una manipulación dinámica de datos y una generación eficiente de PDFs, lo que lo hace ideal para escenarios como la creación de informes, la exportación de datos o la generación de documentos a partir de consultas de base de datos.

El uso de IEnumerable garantiza que su aplicación se mantenga escalable y eficiente en el uso de memoria, ya que procesa datos de manera diferida y evita cargar conjuntos de datos completos en la memoria de una sola vez. Esto es especialmente útil para aplicaciones a gran escala que manejan extensas colecciones de datos, como una tabla de base de datos masiva.

¿Qué es IronPDF?

C# Enumerable(Cómo funciona para desarrolladores): Figura 1

IronPDF es una potente biblioteca .NET diseñada para simplificar el proceso de creación, edición y gestión de archivos PDF de manera programática. Ofrece una amplia gama de características, incluyendo la conversión de HTML a PDF, extracción de texto, fusión de PDF y más. Al integrar IronPDF en tus proyectos de C#, puedes manejar eficientemente tareas complejas de PDF sin necesitar un conocimiento profundo de los detalles internos de PDF.

IronPDF también admite una variedad de formatos, lo que le permite generar PDFs a partir de HTML en bruto, Razor Views, páginas web de ASP.NET o incluso directamente desde estructuras de datos. Esta flexibilidad lo convierte en una herramienta esencial para los desarrolladores que construyen aplicaciones modernas impulsadas por datos.

Primeros pasos

Instalación de IronPDF

Para utilizar IronPDF en tu proyecto, sigue estos pasos:

A través de la consola del Administrador de Paquetes NuGet

  1. Abre tu proyecto .NET en Visual Studio.

    1. Abra la Consola del Administrador de Paquetes NuGet en el menú desplegable de herramientas.

    Enumerable de C# (Cómo funciona para desarrolladores): Figura 2

  2. Ejecute el siguiente comando:
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
VB   C#

A través del Administrador de paquetes NuGet para la Solución

  1. Dentro de tu proyecto de Visual Studio, ve a herramientas > Administrador de paquetes NuGet > Administrar paquetes NuGet para la solución

    1. Buscar IronPDF

    C# Enumerable(Cómo funciona para desarrolladores): Figura 3

    1. Haz clic en "Instalar" para comenzar a instalar el paquete de IronPDF en tu proyecto.

    C# Enumerable(Cómo funciona para desarrolladores): Figura 4

Conceptos básicos de Enumerable en C

La interfaz IEnumerable representa una secuencia de elementos que se pueden enumerar. Ejemplos comunes incluyen arrays, listas y resultados de consultas LINQ. Al aprovechar LINQ, puedes filtrar, ordenar y proyectar datos en el formato deseado antes de generar PDFs con IronPDF.

Una de las ventajas clave de IEnumerable es su modelo de ejecución diferida, que permite que las consultas se ejecuten solo cuando se acceden a sus resultados. Esto permite una manipulación de datos eficiente y reduce la sobrecarga computacional en flujos de trabajo complejos.

Además, que la lista implemente IEnumerable significa que cualquier colección como Listse puede tratar como un IEnumerable, lo que permite realizar operaciones LINQ, filtrado y transformación de manera sencilla.

Casos de uso prácticos

Generando PDFs a partir de datos enumerables

Ejemplo: Exportación de una lista de objetos a una tabla PDF

Imagina que tienes una lista que implementa IEnumerable de empleados que necesitas exportar como una tabla PDF. Usando IEnumerable e IronPDF, puedes iterar a través de los datos y convertirlos en un PDF bien estructurado.

Para mejorar la presentación, puedes utilizar tablas HTML con CSS en línea para dar estilo a las filas y columnas de manera dinámica según los datos. Esto garantiza que la salida en PDF sea tanto funcional como visualmente atractiva.

Filtrado y transformación de datos antes de la generación de PDF

Ejemplo: Usar LINQ para seleccionar y dar formato a datos

Con LINQ, puedes filtrar y transformar tus datos antes de pasarlos a IronPDF. Por ejemplo, podrías filtrar solo a los empleados activos y formatear sus nombres en mayúsculas para la salida 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#

Estos datos transformados pueden luego convertirse en un formato HTML compatible con PDF para su representación.

Generación masiva de PDFs a partir de enumerables

Ejemplo: Creación de múltiples PDFs a partir de una colección

Si necesitas generar un PDF separado para cada registro en una clase de colección, puedes usar un bucle foreach para iterar a través del enumerable y generar dinámicamente PDFs individuales. Esto es particularmente útil para crear facturas, certificados o informes personalizados.

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#

Métodos de extensión para enumerables

En C#, los métodos de extensión son una forma poderosa de añadir funcionalidad a tipos existentes sin modificar su código fuente. Puedes crear un método de extensión para simplificar las operaciones en un IEnumerable o List.

Por ejemplo, vamos a crear un método de extensión para obtener el primer elemento de una colección enumerable.

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#

Implementación paso a paso

Configuración del proyecto

Fragmento de Código: Inicializando IronPDF en C

Comience configurando su proyecto e inicializando IronPDF y la clase ChromePdfRenderer:

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

Convirtiendo Enumerables a Contenido PDF

Fragmento de código: Iterar y formatear datos en HTML

Prepare sus datos enumerables como una cadena 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#

Fragmento de código: Renderizar el HTML a PDF

Convertir el HTML a un 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#

Ejemplo de código completo

Ahora que hemos examinado más de cerca cómo puedes utilizar la clase Enumerable de C# con IronPDF para generar archivos PDF, veamos un ejemplo completo de código en el que hemos usado estas herramientas para generar un nuevo documento PDF dinámico.

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#

Salida PDF

Enumerable de C# (Cómo funciona para los desarrolladores): Figura 5

Código Explicación

Este programa C# está diseñado para generar un informe PDF de datos filtrados de empleados utilizando la biblioteca IronPDF. El código anterior comienza definiendo una clase Employee con propiedades para Nombre, Posición y Edad, que representan registros individuales de empleados.

Se crea una lista de datos de muestra de empleados, que consiste en tres objetos de Empleado con diferentes nombres, posiciones y edades. El programa luego utiliza LINQ para filtrar esta lista, seleccionando solo empleados de 25 años o más, y los ordena alfabéticamente por nombre. Esta lista filtrada y ordenada se almacena en la variable filteredEmployees.

A continuación, el programa construye una cadena de HTML que se utilizará para generar el PDF. Comienza con un encabezado y una estructura de tabla, definiendo los encabezados de las columnas para Nombre, Cargo y Edad. Luego recorre la lista filtrada de empleados, generando dinámicamente filas de tabla para la información de cada empleado. El HTML resultante se utiliza para crear un PDF a través de IronPDF.ChromePdfRenderer.

El ejemplo anterior demuestra efectivamente cómo usar IronPDFpara generar un PDF a partir de HTML generado dinámicamente, mostrando el poder de LINQ para filtrar y ordenar datos, y manejando las excepciones de manera adecuada durante el proceso de generación de PDF.

Consejos de rendimiento y mejores prácticas

Optimizando Operaciones Enumerables

Utilice LINQ para optimizar el filtrado y las transformaciones de sus datos. Por ejemplo:

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#

Minimice las operaciones redundantes encadenando métodos LINQ de manera efectiva. Esto mejora el rendimiento, especialmente al trabajar con grandes conjuntos de datos.

Uso eficiente de la memoria con grandes conjuntos de datos

Para conjuntos de datos grandes, considere transmitir datos en fragmentos más pequeños para evitar la sobrecarga de memoria. Utilice yield return para generar datos de colección no genéricos de forma perezosa, asegurando un uso eficiente de la memoria.

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#

Manejo de errores en la generación de PDF

Envuelve tu lógica de generación de PDF en un bloque try-catch para manejar los errores de forma elegante:

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#

Registrar errores y proporcionar comentarios amigables para el usuario puede mejorar significativamente la robustez de su aplicación.

Conclusión

La integración de IEnumerable de C# con IronPDFdesbloquea una manera eficiente y flexible de generar PDFs profesionales mediante programación. Al aprovechar IEnumerable, puedes optimizar la transformación y el formato de datos mientras aprovechas el amplio conjunto de características de IronPDF para producir documentos de alta calidad. Ya sea que estés exportando informes de datos, creando facturas o generando contenido personalizado, esta combinación garantiza escalabilidad, rendimiento y facilidad de uso.

Animamos a los desarrolladores a explorar funciones más avanzadas de IronPDF, como la inserción de multimedia o la protección de PDFs, para elevar aún más sus flujos de trabajo de automatización de documentos. Para obtener información adicional, tutoriales y soporte, consulte el Documentación de IronPDF.

< ANTERIOR
C# Parallel Foreach (Cómo Funciona para Desarrolladores)
SIGUIENTE >
Eventos en C# (Cómo funciona para desarrolladores)