Passer au contenu du pied de page
.NET AIDE

C# DataTable en liste (Comment ça fonctionne pour les développeurs)

Conversion d'un DataTable en Liste en C

Souvent, dans le domaine de la programmation avec C#, il est nécessaire de convertir un DataTable en une liste. Bien que de nombreux débutants trébuchent sur cette tâche, ils rencontrent souvent des réponses qui ne sont tout simplement pas assez complètes. Ce tutoriel vise à combler cette lacune et à fournir un guide clair sur comment convertir un DataTable en liste en C#.

Qu'est-ce qu'un DataTable ?

Avant de plonger dans le processus de conversion, il est crucial de comprendre ce qu'est un DataTable. En C#, un objet DataTable est une représentation d'une table de base de données en mémoire avec des lignes et des colonnes. Il fait partie de l'espace de noms System.Data.

Dans le cadre de ce tutoriel, utilisons un exemple de DataTable nommé dt. Cela peut être visualisé comme illustré ci-dessous :

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

Commencer avec la Conversion

Donc, vous avez votre DataTable dt, et maintenant vous le regardez en pensant : "Comment convertir cela ?" Ne vous inquiétez pas ; c'est une question qui montre un effort de recherche. Il y a principalement deux méthodes pour convertir un DataTable en une liste :

  1. Utilisation de LINQ (Language Integrated Query)
  2. Utilisation de la boucle classique foreach

Conversion en Utilisant LINQ

La méthode LINQ est un outil puissant en C# qui offre un moyen de requêter des collections de manière déclarative. Voyons comment cela peut être fait.

Définissez une méthode comme suit :

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

Dans le code ci-dessus, la méthode d'extension AsEnumerable() est appelée sur le DataTable dt. Cela nous permet d'utiliser LINQ sur chaque DataRow du DataTable. La méthode crée une liste d'objets dynamiques, chacun représentant une ligne du DataTable.

Conversion en Utilisant la Boucle foreach

La boucle foreach est un moyen éprouvé et testé de parcourir des collections en C#. Cette méthode peut sembler un peu plus longue, mais elle est facile à comprendre et à mettre en œuvre.

Voici comment cela fonctionne :

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

Dans la méthode ForeachMethod, le DataTable est itéré en utilisant une boucle foreach. Pour chaque DataRow, un nouvel objet Category est instancié et ajouté à la liste.

Développer sur les Techniques de Conversion Avancées

Après avoir maîtrisé les bases de la conversion d'un DataTable en une liste en C#, il existe plusieurs techniques et considérations avancées qui peuvent optimiser ce processus et l'adapter à des scénarios plus complexes. Plongeons plus profondément dans certaines de ces techniques.

Utilisation de la Réflexion pour Convertir un DataTable en Liste

La réflexion est un outil puissant en C# qui vous permet d'inspecter les métadonnées des types à l'exécution. Exploitons sa puissance :

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)(ByVal 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 col
		list.Add(obj)
	Next row
	Return list
End Function
$vbLabelText   $csharpLabel

Cette méthode ConvertDataTableToList utilise la réflexion, parcourant chaque DataRow et colonne du DataTable. Pour chaque colonne, elle recherche une propriété correspondante dans l'objet générique et définit sa valeur. Cette approche permet une méthode hautement réutilisable qui peut convertir n'importe quel DataTable en une liste d'objets génériques.

Utilisation

Pour utiliser le code ci-dessus, appelez simplement la méthode en spécifiant le type :

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

Avec cette méthode, vous n'êtes plus limité à convertir des tables de données spécifiques en types d'objets spécifiques. Au lieu de cela, vous avez un outil polyvalent à votre disposition qui peut gérer une variété de scénarios de données.

Considérations de Performance

Bien que la méthode de réflexion soit puissante, il est important de noter qu'elle peut être plus lente, en particulier avec de grandes tables de données. Il est toujours crucial de mesurer les performances et de les comparer aux avantages de la réutilisabilité et de la maintenabilité du code.

Iron Suite Toolkit pour les Développeurs .NET

Bien que nous nous soyons plongés dans les complexités de la conversion de DataTable en listes en C#, parfois, s'appuyer sur des outils externes peut simplifier notre processus de développement, surtout lorsqu'il s'agit d'opérations plus complexes. C'est là que l'Iron Suite entre en jeu.

IronPDF : La Centrale à PDF

C# DataTable to List (How It Works For Developers) Figure 1 - IronPDF for .NET: The C# PDF Library

Lorsqu'il s'agit de travailler avec des PDF en C#, IronPDF change la donne. Imaginez avoir converti votre DataTable en une liste et avoir besoin de générer un rapport PDF à partir de celle-ci. IronPDF peut créer, éditer, et extraire des données de documents PDF sans effort, rationalisant le processus de traduction de vos informations dérivées de la table de données en rapports professionnels.

La fonctionnalité principale d'IronPDF est sa capacité HTML à PDF, garantissant que les mises en page et les styles sont préservés. Il génère des PDF à partir du contenu web, adaptés pour les rapports, les factures, et la documentation. Vous pouvez convertir des fichiers HTML, des URL, et des chaînes HTML en fichiers PDF sans effort.

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 : Exceller dans les Opérations Excel

C# DataTable to List (How It Works For Developers) Figure 2 - IronXL for .NET: The C# Excel Library

Si la conversion de votre DataTable vous amène à des tâches liées à Excel, IronXL est l'outil à utiliser. Ce produit offre des opérations sans faille pour lire, éditer, et créer des feuilles de calcul Excel. Avec la conversion de la table de données en liste en main, l'exportation de vos données vers un format Excel devient incroyablement simple avec IronXL.

IronOCR : Rendre le Texte Reconnaissable

C# DataTable to List (How It Works For Developers) Figure 3 - IronOCR for .NET: The C# OCR Library

Il peut y avoir des moments où votre DataTable comprend des données basées sur des images, ou vous avez besoin d'extraire du texte depuis des images. C'est là que IronOCR s'illustre. Il permet aux développeurs .NET de lire du texte à partir d'images, en faisant un outil complémentaire si vos opérations de conversion de DataTable incluent des images contenant des informations textuelles.

IronBarcode : Lire Entre les Lignes

C# DataTable to List (How It Works For Developers) Figure 4 - IronBarcode for .NET: The C# Barcode Library

Enfin, IronBarcode est l'outil incontournable pour toute opération de code-barres dans vos applications. Supposons que votre DataTable ou la liste à laquelle vous l'avez converti contient des informations sur les produits avec des codes-barres. Dans ce cas, IronBarcode fournit un mécanisme efficace pour lire et générer des codes-barres, comblant l'écart entre les données produit brutes et les informations de code-barres scannables.

Conclusion

C# DataTable to List (How It Works For Developers) Figure 5 - Iron Suite: License information

Bien que les méthodes manuelles de manipulation et de conversion de DataTable soient cruciales pour tout développeur C#, l'intégration d'outils puissants comme ceux fournis par Iron Suite peut considérablement améliorer votre productivité et vos capacités. Il est à noter que chaque licence de produit commence à partir de $799, et ce qui est encore plus attrayant, c'est que chaque produit offre une version d'essai gratuite. Si vous envisagez d'investir dans ces outils, il y a une offre alléchante sur la table : vous pouvez acquérir l'ensemble de l'Iron Suite pour le prix de seulement deux produits. Adopter de telles solutions complètes peut sans aucun doute élever la qualité et l'efficacité de vos efforts de développement .NET.

Questions Fréquemment Posées

Qu'est-ce qu'un DataTable en C#?

Un DataTable en C# est une représentation en mémoire d'une table de base de données, composée de lignes et de colonnes. Il fait partie de l'espace de noms System.Data.

Comment puis-je convertir un DataTable en liste en C# en utilisant LINQ?

Vous pouvez convertir un DataTable en liste en utilisant LINQ en utilisant la méthode AsEnumerable() pour itérer sur chaque DataRow et en utilisant Select pour créer une liste d'objets dynamiques représentant chaque ligne.

Quel est le processus de conversion d'un DataTable en liste en utilisant une boucle foreach en C#?

Pour convertir un DataTable en liste en utilisant une boucle foreach, parcourez chaque DataRow, instanciez un nouvel objet pour chaque ligne, remplissez ses propriétés à partir du DataRow et ajoutez-le à une liste.

Comment la réflexion améliore-t-elle la conversion de DataTable en C#?

L'utilisation de la réflexion permet une méthode hautement réutilisable qui peut convertir n'importe quel DataTable en une liste d'objets génériques en associant dynamiquement les colonnes de DataTable aux propriétés d'objet.

Comment IronPDF peut-il aider à gérer les PDF dérivés des DataTables?

IronPDF permet aux développeurs de créer, éditer et extraire des données de documents PDF, ce qui est utile pour générer des rapports à partir de données dérivées de DataTable.

Quels avantages IronXL offre-t-il pour les opérations Excel en C#?

IronXL facilite l'exportation de données des DataTables au format Excel, permettant aux développeurs de lire, modifier et créer facilement des feuilles de calcul Excel de manière efficace.

De quelles manières IronOCR peut-il être appliqué aux DataTables?

IronOCR peut lire le texte des images au sein des DataTables, permettant aux développeurs de gérer les données basées sur des images contenant des informations textuelles.

Comment IronBarcode améliore-t-il les opérations DataTable avec des codes-barres?

IronBarcode offre la possibilité de lire et de générer des codes-barres, ce qui est bénéfique pour les DataTables ou les listes contenant des informations produit avec des codes-barres.

Quelles considérations de performance doivent être prises en compte lors de l'utilisation de la réflexion pour la conversion de DataTable?

Bien que la réflexion offre de la flexibilité, elle peut être plus lente que d'autres méthodes, surtout avec de grandes tables de données, il est donc important d'équilibrer la performance avec la réutilisabilité et la maintenabilité.

Existe-t-il des opportunités de licence et d'essai disponibles pour les produits Iron Software?

Oui, l'article mentionne qu'il existe des opportunités de licence et d'essai disponibles pour les produits Iron Suite, permettant aux développeurs d'évaluer les outils avant de s'engager dans un achat.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite