Ir para o conteúdo do rodapé
AJUDA DO .NET

Converter DataTable em Lista em C# (Como funciona para desenvolvedores)

Convertendo DataTable em Lista em C

Frequentemente, no contexto da programação em C#, surge a necessidade de converter um DataTable em uma lista. Embora muitos iniciantes se deparem com essa tarefa, as respostas que recebem geralmente não são suficientemente abrangentes. Este tutorial visa preencher essa lacuna e fornecer um guia claro sobre como converter um DataTable em uma lista em C#.

O que é um DataTable?

Antes de mergulhar no processo de conversão, é crucial entender o que é um DataTable . Em C#, um objeto DataTable é uma representação de uma tabela de banco de dados em memória com linhas e colunas. Faz parte do namespace System.Data.

Para fins deste tutorial, vamos usar um exemplo DataTable chamado dt. Isso pode ser visualizado conforme mostrado abaixo:

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");
Imports System.Data

Private dt As New DataTable()
dt.Columns.Add("ID", GetType(Integer))
dt.Columns.Add("Category", GetType(String))
dt.Rows.Add(1, "Electronics")
dt.Rows.Add(2, "Books")
$vbLabelText   $csharpLabel

Primeiros passos com a conversão

Então, você tem seu DataTable dt e agora está olhando para ele pensando: "Como eu converto isso?". Não se preocupe; Essa é uma pergunta que demonstra esforço de pesquisa. Existem basicamente dois métodos para converter DataTable em uma lista:

  1. Utilizando LINQ (Language Integrated Query)
  2. Usando o loop clássico foreach

Conversão usando LINQ

O método LINQ é uma ferramenta poderosa em C# que fornece uma maneira de consultar coleções de forma declarativa. Vamos ver como isso pode ser feito.

Defina um método da seguinte forma:

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();
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports System.Linq
Imports System.Collections.Generic

'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
Private Shared Function LinqMethod(ByVal dt As DataTable) As List(Of Object)
	Return dt.AsEnumerable().Select(Function(row) New With {
		Key .ID = row.Field(Of Integer)("ID"),
		Key .Category = row.Field(Of String)("Category")
	}).ToList()
End Function
$vbLabelText   $csharpLabel

No código acima, o método de extensão AsEnumerable() é chamado em DataTable dt. Isso nos permite usar LINQ em cada DataRow no DataTable. O método cria uma lista de objetos dinâmicos, cada um representando uma linha do DataTable.

Conversão usando o loop foreach

O loop foreach é uma maneira comprovada de iterar sobre coleções em C#. Este método pode parecer um pouco mais longo, mas é fácil de entender e implementar.

Funciona assim:

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; }
}
Private Shared Function ForeachMethod(ByVal dt As DataTable) As List(Of Category)
	Dim list As New List(Of Category)()

	' Iterates through each row within the data table
	For Each row As DataRow In dt.Rows
		Dim category As New Category With {
			.ID = Convert.ToInt32(row("ID")),
			.Name = row("Category").ToString()
		}
		list.Add(category)
	Next row
	Return list
End Function

Public Class Category
	Public Property ID() As Integer
	Public Property Name() As String
End Class
$vbLabelText   $csharpLabel

No método ForeachMethod, o DataTable é iterado usando um loop foreach. Para cada DataRow, um novo objeto Category é instanciado e adicionado ao list.

Aprofundando as técnicas avançadas de conversão

Após dominar os conceitos básicos de conversão de um DataTable em uma lista em C#, existem diversas técnicas e considerações avançadas que podem otimizar esse processo e adaptá-lo a cenários mais complexos. Vamos analisar algumas dessas técnicas com mais detalhes.

Usando Reflection para converter DataTable em uma lista

A reflexão é uma ferramenta poderosa em C# que permite inspecionar os metadados dos tipos em tempo de execução. Vamos aproveitar seu 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;
}
Imports System.Reflection

Private Shared Function ConvertDataTableToList(Of T As New)(dt As DataTable) As List(Of T)
    Dim list As New List(Of T)()

    For Each row As DataRow In dt.Rows
        Dim obj As New T()
        For Each col As DataColumn In dt.Columns
            Dim prop = obj.GetType().GetProperty(col.ColumnName)
            If prop IsNot Nothing AndAlso row(col) IsNot DBNull.Value Then
                prop.SetValue(obj, row(col))
            End If
        Next
        list.Add(obj)
    Next
    Return list
End Function
$vbLabelText   $csharpLabel

Este método ConvertDataTableToList emprega reflexão, iterando sobre cada DataRow e coluna no DataTable. Para cada coluna, o programa busca uma propriedade correspondente no objeto genérico e define seu valor. Essa abordagem permite um método altamente reutilizável que pode converter qualquer DataTable em uma lista de objetos genéricos.

Uso

Para usar o código acima, basta chamar o método especificando o tipo:

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

Com esse método, você não fica mais limitado a converter tabelas de dados específicas em tipos de objeto específicos. Em vez disso, você tem à sua disposição uma ferramenta versátil que pode lidar com uma variedade de cenários de dados.

Considerações sobre o desempenho

Embora o método de reflexão seja poderoso, vale ressaltar que ele pode ser mais lento, especialmente com tabelas de dados grandes. É sempre crucial medir o desempenho e compará-lo com os benefícios da reutilização e da facilidade de manutenção do código.

Iron Suite Toolkit para desenvolvedores .NET

Embora tenhamos explorado as complexidades da conversão de DataTable em listas em C#, às vezes, recorrer a ferramentas externas pode simplificar nosso processo de desenvolvimento, especialmente quando se trata de operações mais complexas. É aí que entra o Iron Suite .

IronPDF: A potência em PDF

Conversão de DataTable para Lista em C# (Como funciona para desenvolvedores) Figura 1 - IronPDF for .NET: A biblioteca PDF em C#

Quando se trata de trabalhar com PDFs em C#, o IronPDF é revolucionário. Imagine que você converteu seu DataTable em uma lista e precisa gerar um relatório em PDF a partir dela. O IronPDF permite criar, editar e extrair dados de documentos PDF sem esforço, simplificando o processo de conversão de informações derivadas de tabelas de dados em relatórios com aparência profissional.

A principal funcionalidade do IronPDF é a conversão de HTML para PDF , garantindo a preservação de layouts e estilos. Ele gera PDFs a partir de conteúdo da web, adequados para relatórios, faturas e documentação. Você pode converter arquivos HTML, URLs e strings HTML em arquivos PDF sem esforço.

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

IronXL: Excelência em Operações com Excel

Conversão de DataTable para Lista em C# (Como funciona para desenvolvedores) Figura 2 - IronXL for .NET: A biblioteca Excel em C#

Se a sua conversão de DataTable gerar a necessidade de tarefas relacionadas ao Excel, o IronXL é a ferramenta ideal. Este produto proporciona operações perfeitas para leitura, edição e criação de planilhas do Excel. Com a conversão de tabela de dados para lista já feita, exportar seus dados para o formato Excel torna-se incrivelmente simples com o IronXL.

IronOCR: Tornando o texto reconhecível

Conversão de DataTable para Lista em C# (Como funciona para desenvolvedores) Figura 3 - IronOCR for .NET: A biblioteca OCR em C#

Pode haver momentos em que seu DataTable consista em dados baseados em imagens, ou você precise extrair texto de imagens. É aí que o IronOCR se destaca. Permite que os desenvolvedores .NET leiam texto de imagens, tornando-se uma ferramenta complementar se suas operações de conversão envolverem imagens contendo informações textuais.

IronBarcode: Lendo nas entrelinhas

Conversão de DataTable para Lista em C# (Como funciona para desenvolvedores) Figura 4 - IronBarcode for .NET: A Biblioteca de Código de Barras em C#

Por fim, o IronBarcode é a ferramenta ideal para todas as operações de código de barras em seus aplicativos. Suponha que seu DataTable ou a lista para a qual você o converteu consista em informações de produtos com códigos de barras. Nesse caso, o IronBarcode fornece um mecanismo eficiente para ler e gerar códigos de barras, preenchendo a lacuna entre os dados brutos do produto e as informações legíveis por meio de códigos de barras.

Conclusão

Conversão de DataTable para Lista em C# (Como funciona para desenvolvedores) Figura 5 - Iron Suite: Informações de licença

Embora os métodos manuais de manipulação e conversão de DataTable sejam cruciais para qualquer desenvolvedor C#, a integração de ferramentas poderosas como as fornecidas pelo Iron Suite pode aumentar exponencialmente sua produtividade e capacidades. Vale destacar que cada licença de produto começa em $799, e o que é ainda mais atraente é que cada produto oferece um teste gratuito . Se você está pensando em investir nessas ferramentas, temos uma oferta tentadora: você pode adquirir o pacote completo Iron Suite pelo preço de apenas dois produtos. Adotar soluções tão abrangentes pode, sem dúvida, elevar a qualidade e a eficiência dos seus projetos de desenvolvimento .NET .

Perguntas frequentes

O que é um DataTable em C#?

Em C#, um DataTable é uma representação em memória de uma tabela de banco de dados, composta por linhas e colunas. Faz parte do namespace System.Data.

Como posso converter um DataTable em uma lista em C# usando LINQ?

Você pode converter um DataTable em uma lista usando LINQ, utilizando o método AsEnumerable() para iterar sobre cada DataRow e usando Select para criar uma lista de objetos dinâmicos representando cada linha.

Qual é o processo de conversão de um DataTable em uma lista usando um loop foreach em C#?

Para converter um DataTable em uma lista usando um loop foreach, itere sobre cada DataRow , instancie um novo objeto para cada linha, preencha suas propriedades a partir do DataRow e adicione-o a uma lista.

Como a reflexão aprimora a conversão de DataTable em C#?

O uso de reflexão permite um método altamente reutilizável que pode converter qualquer DataTable em uma lista de objetos genéricos, mapeando dinamicamente as colunas do DataTable para as propriedades dos objetos.

Como o IronPDF pode auxiliar no processamento de PDFs derivados de DataTables?

O IronPDF permite que os desenvolvedores criem, editem e extraiam dados de documentos PDF, o que é útil para gerar relatórios a partir de dados derivados do DataTable.

Quais as vantagens que o IronXL oferece para operações do Excel em C#?

O IronXL facilita a exportação de dados do DataTables para o formato Excel, permitindo que os desenvolvedores leiam, editem e criem planilhas do Excel com facilidade e eficiência.

De que maneiras o IronOCR pode ser aplicado ao DataTables?

O IronOCR consegue ler texto de imagens dentro do DataTables, permitindo que os desenvolvedores trabalhem com dados baseados em imagens que contenham informações textuais.

Como o IronBarcode aprimora as operações do DataTable com códigos de barras?

O IronBarcode oferece a capacidade de ler e gerar códigos de barras, o que é benéfico para DataTables ou listas que contêm informações de produtos com códigos de barras.

Que considerações de desempenho devem ser levadas em conta ao usar reflexão para conversão de DataTable?

Embora a reflexão ofereça flexibilidade, pode ser mais lenta do que outros métodos, especialmente com tabelas de dados grandes, por isso é importante equilibrar o desempenho com a reutilização e a facilidade de manutenção.

Existem oportunidades de licenciamento e teste gratuito disponíveis para os produtos da Iron Software?

Sim, o artigo menciona que existem oportunidades de licenciamento e testes disponíveis para os produtos Iron Suite, permitindo que os desenvolvedores avaliem as ferramentas antes de se comprometerem com a compra.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim