
C# Orderby (Cómo Funciona para Desarrolladores)
La clasificación es una operación fundamental en cualquier lenguaje de programación, y el método OrderBy de C# es una herramienta poderosa para organizar elementos dentro de colecciones. Ya sea trabajando con matrices, listas u otras estructuras enumerables, comprender cómo aprovechar OrderBy puede mejorar significativamente la legibilidad y funcionalidad de tu código.
Más adelante en este artículo, presentaremos la biblioteca IronPDF de Iron Software y cómo podemos utilizar el método LINQ OrderBy e IronPDF para generar PDFs formateados y ordenados.
¿Qué es el método LINQ OrderBy?
El método OrderBy es parte de la biblioteca LINQ (Language-Integrated Query) en C# y está diseñado específicamente para ordenar elementos en orden ascendente; ya que es la forma predeterminada de ordenar datos, no hay necesidad de una palabra clave para ascendente.
Cómo utilizar el método LINQ OrderBy
Clasificación de datos en orden ascendente
En C#, hay dos formas de aplicar este método: mediante la sintaxis de método o la sintaxis de consulta. Usaremos la sintaxis de método ya que es directa:
var sortedCollection = collection.OrderBy(item => item.OrderByProperty);Dim sortedCollection = collection.OrderBy(Function(item) item.OrderByProperty)Aquí, collection es la colección fuente de IEnumerable que deseas ordenar, y OrderByProperty es la propiedad o expresión por la cual deseas ordenar los elementos. La expresión lambda dentro de OrderBy especifica el criterio de ordenación.
Clasificación de datos en orden descendente
Para ordenar en orden descendente, puedes usar el método OrderByDescending utilizando la sintaxis basada en métodos:
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);Dim sortedCollectionDesc = collection.OrderByDescending(Function(item) item.OrderByProperty)Ordenación de datos por múltiples criterios
En escenarios del mundo real, a menudo necesitas ordenar una colección basada en múltiples criterios. OrderBy permite esto encadenando múltiples llamadas de ThenBy o ThenByDescending:
var multiSortedCollection = collection
.OrderBy(item => item.OrderByProperty1)
.ThenByDescending(item => item.OrderByProperty2);Dim multiSortedCollection = collection.OrderBy(Function(item) item.OrderByProperty1).ThenByDescending(Function(item) item.OrderByProperty2)En este ejemplo, la colección se ordena primero por OrderByProperty1 en orden ascendente. Luego, para los elementos con el mismo valor OrderByProperty1, se ordena por OrderByProperty2 en orden descendente.
Comparadores personalizados
Para requisitos de ordenación más complejos, puedes usar comparadores personalizados. El método OrderBy te permite pasar una implementación de IComparer<t>, como se muestra en el siguiente ejemplo:
var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());Dim customSortedCollection = collection.OrderBy(Function(item) item.Property, New CustomComparer())Aquí, CustomComparer es una clase que implementa la interfaz IComparer<t>, proporcionando lógica personalizada para comparar elementos.
Ejemplo práctico: Ordenación de objetos
Ordenación de una lista de números enteros
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);
}
}
}Imports System
Imports System.Linq
Imports System.Collections.Generic
Friend Class Program
Shared Sub Main()
Dim numbers As New List(Of Integer) From {5, 2, 8, 1, 7}
Dim sortedNumbers = numbers.OrderBy(Function(num) num)
Console.WriteLine("Sorted Numbers:")
For Each number In sortedNumbers
Console.WriteLine(number)
Next number
End Sub
End ClassEn este ejemplo, una lista de enteros se ordena en orden ascendente usando OrderBy.
Ordenar una lista de cadenas
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);
}
}
}Imports System
Imports System.Linq
Imports System.Collections.Generic
Friend Class Program
Shared Sub Main()
Dim names As New List(Of String) From {"Alice", "Charlie", "Bob", "David"}
Dim sortedNames = names.OrderBy(Function(name) name)
Console.WriteLine("Sorted Names:")
For Each name In sortedNames
Console.WriteLine(name)
Next name
End Sub
End ClassEste ejemplo demuestra cómo ordenar una lista de cadenas en orden ascendente alfabéticamente.
Ordenación de una lista de objetos personalizados
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}");
}
}
}Imports System
Imports System.Linq
Imports System.Collections.Generic
Friend Class Person
Public Property FirstName() As String
Public Property LastName() As String
Public Property Age() As Integer
End Class
Friend Class Program
Shared Sub Main()
Dim people As New List(Of Person) From {
New Person With {
.FirstName = "John",
.LastName = "Doe",
.Age = 30
},
New Person With {
.FirstName = "Alice",
.LastName = "Smith",
.Age = 25
},
New Person With {
.FirstName = "Bob",
.LastName = "Johnson",
.Age = 35
}
}
Dim sortedPeople = people.OrderBy(Function(person) person.Age)
Console.WriteLine("Sorted People by Age:")
For Each person In sortedPeople
Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}")
Next person
End Sub
End ClassEn este ejemplo, una lista de objetos personalizados Person se ordena basada en la propiedad Age en orden ascendente.
La siguiente salida es visible en la consola:

Manejo de comparaciones de cadenas
Al tratar con propiedades de cadena, es posible que quieras garantizar una ordenación insensible a mayúsculas y minúsculas:
var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);Dim sortedPeopleByName = people.OrderBy(Function(person) person.LastName, StringComparer.OrdinalIgnoreCase)Este ejemplo utiliza StringComparer.OrdinalIgnoreCase para realizar un ordenamiento insensible a mayúsculas en base a la propiedad LastName.
Consideraciones sobre el rendimiento
Aunque LINQ proporciona una forma concisa de ordenar colecciones, es esencial considerar las implicaciones de rendimiento, especialmente para grandes conjuntos de datos. Para escenarios críticos de rendimiento, podrías explorar alternativas como ordenar en el lugar usando el método List<t>.Sort.
Presentando IronPDF
Descubre las capacidades de IronPDF dentro de la biblioteca de PDF de C# de Iron Software, que ayuda a leer y generar documentos PDF. Puede convertir fácilmente documentos formateados con información de estilo a PDF. IronPDF puede generar PDFs a partir de cadenas de HTML, o puede descargar el HTML de la URL y luego generar PDFs.
IronPDF destaca cuando se trata de convertir HTML a PDF, preservando todos los diseños y estilos. Puede generar PDFs a partir de varios contenidos web, como informes, facturas y documentación. La herramienta trabaja con archivos HTML, URLs y cadenas de HTML para crear archivos 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");
}
}Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End ClassInstalación
IronPDF se puede instalar utilizando la consola de administración de paquetes NuGet o utilizando el administrador de paquetes de Visual Studio.
PM > Install-Package IronPdf
También puedes instalar IronPDF usando el Administrador de paquetes NuGet buscando "IronPDF" en la barra de búsqueda.

Generación de un PDF con IronPDF
A continuación se muestra el código para generar un informe PDF usando una cadena de HTML y el generador de IronPDF:
// 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
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Linq
Class Person
Public Property FirstName As String
Public Property LastName As String
Public Property Age As Integer
End Class
Class Program
Shared Sub Main()
Dim people As New List(Of Person) From {
New Person With {.FirstName = "John", .LastName = "Doe", .Age = 30},
New Person With {.FirstName = "Alice", .LastName = "Smith", .Age = 25},
New Person With {.FirstName = "Bob", .LastName = "Johnson", .Age = 35}
}
' Sort people by age
Dim sortedPeople = people.OrderBy(Function(person) person.Age)
Dim name As String = "Sam"
Dim count = people.Count
' Generate an HTML string
Dim content As String = $"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} people sorted by Age.</p>
" & String.Join(vbLf, sortedPeople.Select(Function(person) $"{person.FirstName} {person.LastName}, Age: {person.Age}")) & "
</body>
</html>"
' Create a new PDF document and save it
Dim pdfDocument As New ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf")
End Sub
End ClassAquí primero estamos generando una cadena HTML desde sortedPeople que se ordena en orden ascendente con todo el formato requerido para los informes. Luego usamos IronPDF para generar un documento PDF. Utilizamos el método RenderHtmlAsPdf para convertir la cadena HTML en un documento PDF.
Resultado
La siguiente salida está disponible en el PDF:

Licencia (Prueba gratuita disponible)
Se puede obtener una clave de prueba de Licencia de Prueba de IronPDF. Esta clave debe colocarse en appsettings.json.
"IronPdf.LicenseKey": "your license key"
Proporcione su correo para una licencia de prueba.
Conclusión
El método OrderBy en C# es una herramienta versátil para ordenar colecciones basadas en varios criterios. Ya sea que estés ordenando en orden ascendente o descendente, por un solo criterio o por múltiples criterios, o utilizando comparadores personalizados, dominar OrderBy puede mejorar significativamente la claridad y eficiencia de tu código.
Junto con la biblioteca IronPDF para generar documentos PDF, es una gran combinación para generar una colección bellamente formateada y ordenada como documento.

Jacob Mellor is Chief Technology Officer at Iron Software and a visionary engineer pioneering C# PDF technology. As the original developer behind Iron Software's core codebase, he has shaped the company's product architecture since its inception, transforming it alongside CEO Cameron Rimington into a 50+ person company serving NASA, Tesla, and global government agencies.
Related Articles


