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

En programmation C#, il arrive souvent qu'on ait besoin de convertir une chaîne de caractères (DataTable) en liste. Si de nombreux débutants rencontrent cette difficulté, les réponses qu'ils trouvent sont souvent insuffisantes. Ce tutoriel vise à combler cette lacune et à fournir un guide clair sur la façon de convertir un DataTable en une liste en C#.

Qu'est-ce qu'un DataTable ?

Avant de se lancer 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. Cela fait partie de l'espace de noms System.Data.

Pour les besoins de ce tutoriel, utilisons un exemple 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

Vous avez donc votre DataTable dt, et maintenant vous le fixez en vous demandant : " Comment puis-je convertir cela ? ". Ne vous inquiétez pas ; c'est une question qui montre un effort de recherche. Il existe principalement deux méthodes pour convertir 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 DataTable dt. Cela nous permet d'utiliser LINQ sur chaque DataRow dans le DataTable. La méthode crée une liste d'objets dynamiques, chacun représentant une ligne de DataTable.

Conversion avec la boucle foreach

La boucle foreach est une méthode éprouvée pour itérer sur 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, l'objet DataTable est parcouru à l'aide d'une boucle foreach. Pour chaque objet DataRow, un nouvel objet Category est instancié et ajouté à l'objet list.

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, en itérant sur chaque DataRow et colonne dans le 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.

La boîte à outils Iron Suite pour les développeurs .NET

Bien que nous ayons exploré les subtilités de la conversion de DataTable en listes en C#, il arrive que le recours à des outils externes simplifie notre processus de développement, notamment lorsqu'il s'agit d'opérations plus complexes. C'est là que l'Iron Suite entre en jeu.

IronPDF : la centrale à PDF

Conversion de DataTable en List en C# (Fonctionnement pour les développeurs) Figure 1 - IronPDF for .NET: La bibliothèque PDF C#

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 ensuite 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

Conversion d'un DataTable en List en C# (Fonctionnement pour les développeurs) Figure 2 - IronXL for .NET: La bibliothèque Excel pour C#

Si votre conversion DataTable entraîne un besoin de tâches liées à Excel, IronXL est l'outil vers lequel se tourner. 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

 Conversion d'une DataTable en List en C# (Fonctionnement pour les développeurs) Figure 3 - IronOCR for .NET: La bibliothèque OCR C#

Il peut arriver que votre DataTable soit constitué de données basées sur des images, ou que vous ayez besoin d'extraire du texte à partir d'images. C'est là que IronOCR s'illustre. Il permet aux développeurs .NET de lire du texte à partir d'images, ce qui en fait un outil complémentaire si vos opérations de conversion DataTable impliquent des images contenant des informations textuelles.

IronBarcode : lire entre les lignes

Conversion d'une DataTable en List en C# (Fonctionnement pour les développeurs) Figure 4 - IronBarcode for .NET: La bibliothèque de codes-barres C#

Enfin, IronBarcode est l'outil incontournable pour toute opération de code-barres dans vos applications. Supposons que votre DataTable ou la liste dans laquelle vous l'avez convertie contienne 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 vers List (Fonctionnement pour les développeurs) Figure 5 - Iron Suite: Informations de licence

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 améliorer de manière exponentielle votre productivité et vos capacités. Il est à noter que chaque licence de produit commence par $999, et ce qui est encore plus attrayant, c'est que chaque produit offre un essai gratuit . 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.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur de la technologie chez Iron Software et un ingénieur visionnaire pionnier de la technologie C# PDF. En tant que développeur à l'origine de la base de code centrale d'Iron Software, il a façonné l'architecture des produits de l'entreprise depuis sa création, ...

Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi