Saltar al pie de página
.NET AYUDA

C# Datatable to List (Cómo funciona para desarrolladores)

Converting DataTable to List in C

A menudo, en el ámbito de la programación con C#, surge la necesidad de convertir un DataTable en una lista. Aunque muchos principiantes se topan con esta tarea, a menudo se encuentran con respuestas que no son lo suficientemente completas. Este tutorial tiene como objetivo cerrar esa brecha y proporcionar una guía clara sobre cómo convertir un DataTable en una lista en C#.

¿Qué es un DataTable?

Antes de sumergirnos en el proceso de conversión, es fundamental comprender qué es un DataTable . En C#, un objeto DataTable es una representación de una tabla de base de datos en memoria con filas y columnas. Es parte del espacio de nombres System.Data.

Para los fines de este tutorial, utilizaremos un ejemplo DataTable llamado dt. Esto se puede visualizar como se muestra a continuación:

using System.Data;

DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Category", typeof(string));
dt.Rows.Add(1, "Electronics");
dt.Rows.Add(2, "Books");
using System.Data;

DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Category", typeof(string));
dt.Rows.Add(1, "Electronics");
dt.Rows.Add(2, "Books");
$vbLabelText   $csharpLabel

Cómo empezar con la conversión

Entonces, tienes tu DataTable dt, y ahora lo estás mirando pensando: "¿Cómo convierto esto?". No te preocupes; esa es una pregunta que muestra un esfuerzo de investigación. Existen principalmente dos métodos para convertir DataTable en una lista:

  1. Usando LINQ (Language Integrated Query)
  2. Usando el bucle clásico foreach

Conversión mediante LINQ

El método LINQ es una herramienta poderosa en C# que proporciona una forma de consultar colecciones de manera declarativa. Veamos cómo se puede hacer esto.

Define un método como sigue:

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

private static List<dynamic> LinqMethod(DataTable dt)
{
    return dt.AsEnumerable().Select(row =>
        new 
        {
            ID = row.Field<int>("ID"),
            Category = row.Field<string>("Category")
        }).ToList();
}
using System.Linq;
using System.Collections.Generic;

private static List<dynamic> LinqMethod(DataTable dt)
{
    return dt.AsEnumerable().Select(row =>
        new 
        {
            ID = row.Field<int>("ID"),
            Category = row.Field<string>("Category")
        }).ToList();
}
$vbLabelText   $csharpLabel

En el código anterior, se llama al método de extensión AsEnumerable() en DataTable dt. Esto nos permite usar LINQ en cada DataRow en el DataTable. El método crea una lista de objetos dinámicos, cada uno de los cuales representa una fila de DataTable.

Conversión mediante bucle foreach

El bucle foreach es una forma probada y comprobada de iterar sobre colecciones en C#. Este método puede parecer un poco más largo, pero es fácil de entender e implementar.

Así es como funciona:

private static List<Category> ForeachMethod(DataTable dt)
{
    List<Category> list = new List<Category>();

    // Iterates through each row within the data table
    foreach (DataRow row in dt.Rows)
    {
        var category = new Category
        {
            ID = Convert.ToInt32(row["ID"]),
            Name = row["Category"].ToString()
        };
        list.Add(category);
    }
    return list;
}

public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}
private static List<Category> ForeachMethod(DataTable dt)
{
    List<Category> list = new List<Category>();

    // Iterates through each row within the data table
    foreach (DataRow row in dt.Rows)
    {
        var category = new Category
        {
            ID = Convert.ToInt32(row["ID"]),
            Name = row["Category"].ToString()
        };
        list.Add(category);
    }
    return list;
}

public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}
$vbLabelText   $csharpLabel

En el método ForeachMethod, se itera el DataTable mediante un bucle foreach. Por cada DataRow, se instancia un nuevo objeto Category y se añade al list.

Ampliación de las técnicas de conversión avanzadas

Después de dominar los conceptos básicos de la conversión de un DataTable en una lista en C#, existen varias técnicas y consideraciones avanzadas que pueden optimizar este proceso y adaptarlo a escenarios más complejos. Profundicemos en algunas de estas técnicas.

Uso de la reflexión para convertir DataTable en lista

La reflexión es una herramienta poderosa en C# que te permite inspeccionar los metadatos de tipos en tiempo de ejecución. Aprovechemos su poder:

using System.Reflection;

private static List<t> ConvertDataTableToList<t>(DataTable dt) where T : new()
{
    List<t> list = new List<t>();

    foreach (DataRow row in dt.Rows)
    {
        T obj = new T();
        foreach (DataColumn col in dt.Columns)
        {
            var prop = obj.GetType().GetProperty(col.ColumnName);
            if (prop != null && row[col] != DBNull.Value)
                prop.SetValue(obj, row[col]);
        }
        list.Add(obj);
    }
    return list;
}
using System.Reflection;

private static List<t> ConvertDataTableToList<t>(DataTable dt) where T : new()
{
    List<t> list = new List<t>();

    foreach (DataRow row in dt.Rows)
    {
        T obj = new T();
        foreach (DataColumn col in dt.Columns)
        {
            var prop = obj.GetType().GetProperty(col.ColumnName);
            if (prop != null && row[col] != DBNull.Value)
                prop.SetValue(obj, row[col]);
        }
        list.Add(obj);
    }
    return list;
}
$vbLabelText   $csharpLabel

Este método ConvertDataTableToList emplea reflexión, iterando sobre cada DataRow y columna en DataTable. Para cada columna, busca una propiedad coincidente en el objeto genérico y establece su valor. Este enfoque permite un método altamente reutilizable que puede convertir cualquier DataTable en una lista de objetos genéricos.

Uso

Para usar el código anterior, simplemente llama al método especificando el tipo:

List<Category> categories = ConvertDataTableToList<Category>(dt);
List<Category> categories = ConvertDataTableToList<Category>(dt);
$vbLabelText   $csharpLabel

Con este método, ya no estás limitado a convertir tablas de datos específicas a tipos de objetos específicos. En su lugar, tienes una herramienta versátil a tu disposición que puede manejar una variedad de escenarios de datos.

Consideraciones sobre el rendimiento

Aunque el método de reflexión es poderoso, vale la pena señalar que puede ser más lento, especialmente con tablas de datos grandes. Siempre es crucial medir el rendimiento y ponderarlo en comparación con los beneficios de reutilización y mantenimiento del código.

Herramientas Iron Suite para desarrolladores .NET

Si bien hemos profundizado en las complejidades de convertir DataTable en listas en C#, a veces, confiar en herramientas externas puede simplificar nuestro proceso de desarrollo, especialmente cuando se trata de operaciones más complejas. Ahí es donde entra en juego Iron Suite.

IronPDF: La central de PDF

C# DataTable a lista (cómo funciona para desarrolladores) Figura 1 - IronPDF for .NET: La biblioteca PDF de C#

Cuando se trata de trabajar con PDFs en C#, IronPDF es un cambio total. Imagínese haber convertido su DataTable en una lista y luego necesitar generar un informe en PDF a partir de él. IronPDF puede crear, editar y extraer datos de documentos PDF sin esfuerzo, agilizando el proceso de traducir la información derivada de tu tabla de datos en informes de aspecto profesional.

La característica principal de IronPDF es su funcionalidad de HTML a PDF, asegurando que se conserven los diseños y estilos. Genera PDFs a partir de contenido web, adecuado para informes, facturas y documentación. Puedes convertir archivos HTML, URLs y cadenas HTML a archivos PDF sin esfuerzo.

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");
    }
}
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");
    }
}
$vbLabelText   $csharpLabel

IronXL: Sobresaliendo en las operaciones de Excel

C# DataTable a lista (cómo funciona para desarrolladores) Figura 2 - IronXL for .NET: la biblioteca de Excel de C#

Si su conversión de DataTable genera la necesidad de realizar tareas relacionadas con Excel, IronXL es la herramienta a la que recurrir. Este producto proporciona operaciones fluídas para leer, editar y crear hojas de cálculo de Excel. Con la conversión de tabla de datos a lista en mano, exportar tus datos a un formato Excel se vuelve increíblemente sencillo con IronXL.

IronOCR: Cómo hacer que el texto sea reconocible

C# DataTable a lista (cómo funciona para desarrolladores) Figura 3 - IronOCR for .NET: la biblioteca de OCR de C#

Puede haber ocasiones en las que su DataTable consista en datos basados ​​en imágenes o necesite extraer texto de imágenes. Aquí es donde IronOCR destaca. Permite a los desarrolladores .NET leer texto de imágenes, lo que lo convierte en una herramienta complementaria si sus operaciones de conversión involucran imágenes que contienen información textual.

IronBarcode: Leyendo entre líneas

C# DataTable a lista (cómo funciona para desarrolladores) Figura 4 - IronBarcode for .NET: La biblioteca de códigos de barras de C#

Finalmente, IronBarcode es la herramienta de referencia para cualquier operación de código de barras en tus aplicaciones. Supongamos que su DataTable o la lista a la que lo ha convertido consta de información de productos con códigos de barras. En ese caso, IronBarcode proporciona un mecanismo eficiente para leer y generar códigos de barras, cerrando la brecha entre datos de productos crudos y la información de códigos de barras escaneables.

Conclusión

C# DataTable a lista (cómo funciona para desarrolladores) Figura 5 - Iron Suite: Información de licencia

Si bien los métodos manuales de manipulación y conversión de DataTable son cruciales para cualquier desarrollador de C#, la integración de herramientas potentes como las proporcionadas por Iron Suite puede mejorar exponencialmente su productividad y sus capacidades. Cabe destacar que cada licencia de producto comienza desde $799, y lo que es aún más atractivo es que cada producto ofrece una prueba gratuita . Si estás contemplando invertir en estas herramientas, ahí está sobre la mesa una oferta tentadora: puedes adquirir toda la Iron Suite por el precio de solo dos productos. Adoptar soluciones tan completas ciertamente puede elevar la calidad y eficiencia de tus esfuerzos de desarrollo .NET.

Preguntas Frecuentes

¿Qué es un DataTable en C#?

Un DataTable en C# es una representación en memoria de una tabla de base de datos, que consta de filas y columnas. Forma parte del espacio de nombres System.Data.

¿Cómo puedo convertir un DataTable a una lista en C# usando LINQ?

Puedes convertir un DataTable a una lista usando LINQ utilizando el método AsEnumerable() para iterar sobre cada DataRow y usando Select para crear una lista de objetos dinámicos que representan cada fila.

¿Cuál es el proceso de convertir un DataTable a una lista usando un bucle foreach en C#?

Para convertir un DataTable a una lista usando un bucle foreach, itera sobre cada DataRow, instancia un nuevo objeto para cada fila, llena sus propiedades desde el DataRow y agrégalo a una lista.

¿Cómo mejora la reflexión la conversión de DataTable en C#?

Usar reflexión permite un método altamente reutilizable que puede convertir cualquier DataTable en una lista de objetos genéricos mapeando dinámicamente las columnas del DataTable a propiedades de objetos.

¿Cómo puede IronPDF ayudar a manejar PDFs derivados de DataTables?

IronPDF permite a los desarrolladores crear, editar y extraer datos de documentos PDF, lo cual es útil para generar informes a partir de datos derivados de DataTables.

¿Qué ventajas proporciona IronXL para las operaciones de Excel en C#?

IronXL facilita la exportación de datos de DataTables a formato Excel, permitiendo a los desarrolladores leer, editar y crear hojas de cálculo de Excel de manera eficiente.

¿De qué maneras se puede aplicar IronOCR a DataTables?

IronOCR puede leer texto de imágenes dentro de DataTables, permitiendo a los desarrolladores manejar datos basados en imágenes que contienen información textual.

¿Cómo mejora IronBarcode las operaciones con DataTables con códigos de barras?

IronBarcode proporciona la capacidad de leer y generar códigos de barras, lo cual es beneficioso para DataTables o listas que contienen información de productos con códigos de barras.

¿Qué consideraciones de rendimiento deben tenerse en cuenta al usar reflexión para la conversión de DataTable?

Aunque la reflexión ofrece flexibilidad, puede ser más lenta que otros métodos, especialmente con tablas de datos grandes, por lo que es importante equilibrar el rendimiento con la reutilización y el mantenimiento.

¿Existen oportunidades de licencia y prueba disponibles para los productos de Iron Software?

Sí, el artículo menciona que hay oportunidades de licencia y prueba disponibles para los productos de Iron Suite, permitiendo a los desarrolladores evaluar las herramientas antes de comprometerse con una compra.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, ...

Leer más

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me