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")
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:
- Utilizando LINQ (Language Integrated Query)
- 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
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
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
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)
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

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
IronXL: Excelência em Operações com Excel

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

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

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

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.




