.NET-HILFE

C# Datatable zu Liste (Wie es funktioniert für Entwickler)

Veröffentlicht 14. November 2023
Teilen Sie:

Bei der Programmierung mit C# kommt es häufig vor, dass eine Datentabelle in eine Liste umgewandelt werden muss. Während viele Anfänger über diese Aufgabe stolpern, werden sie oft mit Antworten konfrontiert, die einfach nicht umfassend genug sind. Dieses Tutorial zielt darauf ab, diese Lücke zu schließen und eine klare Anleitung zu geben, wie man DataTable in C# in eine Liste konvertiert.

Was ist eine DataTable?

Bevor Sie sich mit dem Umwandlungsprozess befassen, sollten Sie wissen, was ein datenTabelle ist. In C# ist ein DataTable-Objekt eine Darstellung einer speicherinternen Datenbanktabelle mit Zeilen und Spalten. Sie ist Teil des Namensraums "System.Data".

Für dieses Lernprogramm verwenden wir eine Beispiel-Datentabelle mit dem Namen "Datentabelle dt". die Datentabelle "dt" kann wie im folgenden Codebeispiel dargestellt werden:

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");
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");
Dim 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")
VB   C#

Erste Schritte bei der Konvertierung

Sie haben also Ihre "Datentabelle dt", und jetzt starren Sie sie an und fragen sich: "Wie konvertiere ich das?". Machen Sie sich keine Sorgen; das ist eine Frage, die den Forschungsaufwand zeigt. Es gibt hauptsächlich zwei Methoden, um DataTable in eine Liste zu konvertieren:

  1. Verwendung von LINQ (Sprache Integrierte Abfrage)

  2. Verwendung der klassischen "Foreach-Schleife

Konvertierung mit LINQ

Die LINQ-Methode ist ein leistungsfähiges Tool in C#, mit dem sich Sammlungen auf deklarative Weise abfragen lassen. Schauen wir uns an, wie dies geschehen kann.

Definieren Sie eine Methode wie im folgenden Codebeispiel:

private static void LinqMethod(DataTable dt)
{
    var list = dt.AsEnumerable().Select(row =>
        new 
        {
            ID = row.Field<int>("ID"),
            Category = row.Field<string>("Category")
        }).ToList();
}
private static void LinqMethod(DataTable dt)
{
    var list = dt.AsEnumerable().Select(row =>
        new 
        {
            ID = row.Field<int>("ID"),
            Category = row.Field<string>("Category")
        }).ToList();
}
Private Shared Sub LinqMethod(ByVal dt As DataTable)
	Dim list = dt.AsEnumerable().Select(Function(row) New With {
		Key .ID = row.Field(Of Integer)("ID"),
		Key .Category = row.Field(Of String)("Category")
	}).ToList()
End Sub
VB   C#

Beachten Sie die Verwendung von var list, var row und der linqmethod. Im obigen Code wird die Erweiterungsmethode `AsEnumerable()für die "Datentabelle dt" aufgerufen. So können wir LINQ auf jede Zeile "DataRow" in der "DataTable" anwenden.

Konvertierung mit "Foreach"-Schleife

Die "Foreach-Schleife" ist die bewährte Methode, um in C# über Sammlungen zu iterieren. Diese Methode mag etwas länger erscheinen, aber sie ist leicht zu verstehen und umzusetzen.

Fangen wir an:

private static void 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();
        category.ID = Convert.ToInt32(row ["ID"]);
        category.Name = row ["Category"].ToString();
        list.Add(category);
    }
}
private static void 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();
        category.ID = Convert.ToInt32(row ["ID"]);
        category.Name = row ["Category"].ToString();
        list.Add(category);
    }
}
Private Shared Sub ForeachMethod(ByVal dt As DataTable)
	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()
		category.ID = Convert.ToInt32(row ("ID"))
		category.Name = row ("Category").ToString()
		list.Add(category)
	Next row
End Sub
VB   C#

In der `private static void ForeachMethod()methode wird die Datentabelle mit Hilfe einer "Foreach-Schleife" durchlaufen. Für jede "Katarow-Zeile" wird ein neues "Var-Kategorie"-Objekt instanziiert und der "Var-Liste" hinzugefügt.

Um die Kategorie darzustellen, brauchen Sie eine Klasse:

public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}
public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}
Public Class Category
	Public Property ID() As Integer
	Public Property Name() As String
End Class
VB   C#

Fortgeschrittene Konvertierungstechniken erweitern

Nachdem Sie die Grundlagen der Konvertierung einer Datentabelle in eine Liste in C# gemeistert haben, gibt es einige fortgeschrittene Techniken und Überlegungen, die diesen Prozess optimieren und an komplexere Szenarien anpassen können. Lassen Sie uns einige dieser Techniken näher beleuchten.

Eine der Einschränkungen der zuvor besprochenen Methoden ist, dass sie spezifisch für unsere Klasse "Kategorie" sind. Wie wäre es, wenn Sie eine Methode schreiben könnten, die eine beliebige "Datentabelle" in eine Liste allgemeiner Objekte umwandelt?

Verwendung von Reflection zur Umwandlung von "DataTable" in eine Liste

Reflection ist ein leistungsfähiges Werkzeug in C#, mit dem Sie die Metadaten von Typen zur Laufzeit untersuchen können. Machen wir uns seine Macht zunutze

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;
}
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;
}
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
VB   C#

Diese private statische Methode verwendet Reflexion und iteriert über jede DataRow row und Spalte in der DataTable dt. Für jede Spalte wird nach einer passenden Eigenschaft gesucht (var prop) im generischen Objekt und setzt dessen Wert. Dieser Ansatz ermöglicht eine hochgradig wiederverwendbare Methode, die jede "Datentabelle" in eine Liste von generischen Objekten umwandeln kann.

Verwendung

Um den obigen Code zu verwenden, rufen Sie einfach die Methode auf, indem Sie den Typ angeben:

List<Category> categories = ConvertDataTableToList<Category>(dt);
List<Category> categories = ConvertDataTableToList<Category>(dt);
Dim categories As List(Of Category) = ConvertDataTableToList(Of Category)(dt)
VB   C#

Mit dieser Methode sind Sie nicht mehr auf die Konvertierung bestimmter Datentabellen in bestimmte Objekttypen beschränkt. Stattdessen steht Ihnen ein vielseitiges Werkzeug zur Verfügung, das eine Vielzahl von Datenszenarien verarbeiten kann.

Überlegungen zur Leistung

Die Reflection-Methode ist zwar mächtig, aber vor allem bei großen Datentabellen kann sie langsamer sein. Es ist immer wichtig, die Leistung zu messen und sie gegen die Vorteile der Wiederverwendbarkeit und Wartbarkeit des Codes abzuwägen.

Iron Suite Toolkit für .NET-Entwickler

Wir haben uns zwar mit den Feinheiten der Konvertierung von "DataTable" in Listen in C# befasst, aber manchmal kann der Rückgriff auf externe Tools den Entwicklungsprozess vereinfachen, insbesondere wenn es um komplexere Vorgänge geht. Das ist der Ort, an dem Iron Suite ins Spiel kommt.

Iron Suite ist eine umfassende Suite von Tools, die das Leben von .NET-Entwicklern erleichtern soll. Von PDF-Operationen und Excel-Manipulationen bis zur optischen Zeichenerkennung (OCR) und Barcode-Lesen bietet Iron Suite eine Vielzahl von Möglichkeiten. Schauen wir uns die Komponenten der Iron Suite an und sehen wir, wie sie unsere "DataTable"-Operationen ergänzen können.

IronPDF: Das PDF-Kraftpaket

C# DataTable zu Liste (Wie es für Entwickler funktioniert) Abbildung 1 - IronPDF for .NET: Die C# PDF-Bibliothek

Wenn es um die Arbeit mit PDFs in C# geht, IronPDF ist ein Wendepunkt. Stellen Sie sich vor, Sie haben Ihre "Datentabelle" in eine Liste umgewandelt und müssen nun einen PDF-Bericht daraus erstellen. IronPDF kann mühelos Daten aus PDF-Dokumenten erstellen, bearbeiten und extrahieren und so den Prozess der Umwandlung Ihrer aus Datentabellen abgeleiteten Informationen in professionell aussehende Berichte rationalisieren.

Das Hauptmerkmal von IronPDF ist seine HTML zu PDF funktionalität, um sicherzustellen, dass Layouts und Stile erhalten bleiben. Es erzeugt PDFs aus Webinhalten, die sich für Berichte, Rechnungen und Dokumentationen eignen. Sie können HTML-Dateien, URLs und HTML-Strings mühelos in PDF-Dateien umwandeln.

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
VB   C#

IronXL: Herausragende Excel-Operationen

C# DataTable zu Liste (Wie es für Entwickler funktioniert) Abbildung 2 - IronXL for .NET: Die C# Excel-Bibliothek

Wenn Ihre "DataTable"-Konvertierung zu einem Bedarf an Excel-bezogenen Aufgaben führt, IronXL ist das Werkzeug, an das man sich wenden muss. Dieses Produkt bietet nahtlose Operationen zum Lesen, Bearbeiten und Erstellen von Excel-Tabellen. Mit der Konvertierung von Datentabellen in Listen ist der Export Ihrer Daten in ein Excel-Format mit IronXL ein Kinderspiel.

IronOCR: Text erkennbar machen

C# DataTable zu Liste (Wie es für Entwickler funktioniert) Abbildung 3 - IronOCR for .NET: Die C# OCR-Bibliothek

Es kann vorkommen, dass Ihre DataTable aus bildbasierten Daten besteht oder Sie Text aus Bildern extrahieren müssen. Dies ist der Ort, an dem IronOCR glänzt. Es ermöglicht .NET-Entwicklern das Lesen von Text aus Bildern und ist somit ein ergänzendes Werkzeug, wenn Ihre DataTable-Konvertierungsoperationen Bilder mit Textinformationen beinhalten.

IronBarcode: Zwischen den Zeilen lesen

C# DataTable zu Liste (Wie es für Entwickler funktioniert) Abbildung 4 - IronBarcode for .NET: Die C# Barcode-Bibliothek

Endlich, IronBarcode ist das ideale Werkzeug für alle Barcode-Operationen in Ihren Anwendungen. Angenommen, Ihre "Datentabelle" oder die Liste, in die Sie sie konvertiert haben, besteht aus Produktinformationen mit Strichcodes. In diesem Fall bietet IronBarcode einen effizienten Mechanismus zum Lesen und Generieren von Barcodes und schließt die Lücke zwischen Produktrohdaten und scanbaren Barcode-Informationen.

Schlussfolgerung

C# DataTable zu Liste (Wie es für Entwickler funktioniert) Abbildung 5 - Iron Suite: Lizenzinformationen

Während die manuellen Methoden zur Manipulation und Konvertierung von DataTable für jeden C#-Entwickler von entscheidender Bedeutung sind, kann die Integration leistungsstarker Tools wie die von Iron Suite bereitgestellten Ihre Produktivität und Fähigkeiten exponentiell steigern. Es ist bemerkenswert, dass jede Produktlizenz ab $749 beginnt, und was noch attraktiver ist, ist, dass jedes Produkt eine kostenloser Test. Wenn Sie mit dem Gedanken spielen, in diese Werkzeuge zu investieren, liegt ein verlockendes Angebot auf dem Tisch: Sie können die gesamte Iron Suite erwerben für den Preis von nur zwei Produkten. Der Einsatz solcher umfassenden Lösungen kann zweifellos die Qualität und Effizienz Ihrer .NET-Entwicklungsbemühungen steigern.

< PREVIOUS
C# Web App (Wie es für Entwickler funktioniert)
NÄCHSTES >
C# Ref Keywords (Wie es für Entwickler funktioniert)

Sind Sie bereit, loszulegen? Version: 2024.10 gerade veröffentlicht

Gratis NuGet-Download Downloads insgesamt: 11,308,499 Lizenzen anzeigen >