
Converter DataTable em Lista em C# (Como funciona para desenvolvedores)
Converting DataTable to List in C#
Frequentemente, no domínio da programação com C#, surge a necessidade de converter um DataTable em uma lista. Enquanto muitos novatos tropeçam nesta tarefa, eles frequentemente se deparam com respostas que simplesmente não são abrangentes o suficiente. Este tutorial visa preencher essa lacuna e fornecer um guia claro sobre como converter um DataTable para 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 na memória com linhas e colunas. Ele faz parte do namespace System.Data.
Para o propósito deste tutorial, vamos usar um exemplo DataTable nomeado 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");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 principalmente 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();
}'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 FunctionNo código acima, o método de extensão AsEnumerable() é chamado no 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 Loop foreach
O loop foreach é uma maneira testada e 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 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 ClassNo método ForeachMethod, o DataTable é percorrido 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
Depois de dominar o básico de converter um DataTable para uma lista em C#, existem várias técnicas avançadas e considerações que podem otimizar esse processo e adaptá-lo a cenários mais complexos. Vamos analisar algumas dessas técnicas com mais detalhes.
Usando Reflexão para Converter DataTable em 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;
}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 FunctionEste 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 para 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);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
Enquanto exploramos as complexidades de converter DataTable para listas em C#, às vezes, confiar em 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 ter convertido seu DataTable para uma lista e depois precisar gerar um relatório 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");
}
}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 ClassIronXL: Excelência em Operações com Excel

Se sua conversão DataTable leva a uma necessidade de tarefas relacionadas ao Excel, IronXL é a ferramenta a recorrer. 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 consiste em dados baseados em imagem, ou você precisa extrair texto de imagens. É aí que o IronOCR se destaca. Ele permite que desenvolvedores .NET leiam texto de imagens, tornando-se uma ferramenta complementar se suas operações de conversão DataTable 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 consistam 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 DataTable sejam cruciais para qualquer desenvolvedor C#, integrar ferramentas poderosas como as fornecidas pela Iron Suite pode aumentar exponencialmente sua produtividade e capacidades. É notável que cada licença de produto começa com $999, e o que é ainda mais atraente é que cada produto oferece uma avaliação gratuita. 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 .

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 bem estruturados e visualmente atraentes.
Artigos relacionados


