Zum Fußzeileninhalt springen
.NET HILFE

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

DataTable in Liste umwandeln in C

Beim Programmieren mit C# kommt es häufig vor, dass man eine Zeichenkette vom Typ DataTable in eine Liste umwandeln muss. Viele Anfänger stoßen dabei auf diese Aufgabe, finden aber oft nicht die passenden Lösungen. Dieses Tutorial soll diese Lücke schließen und eine klare Anleitung bieten, wie man ein DataTable in eine Liste in C# umwandelt.

Was ist ein DataTable?

Bevor wir uns mit dem Konvertierungsprozess befassen, ist es wichtig zu verstehen, was ein DataTable ist. In C# ist ein DataTable-Objekt eine Darstellung einer In-Memory-Datenbanktabelle mit Zeilen und Spalten. Es ist Teil des Namespace System.Data.

Für dieses Tutorial verwenden wir ein Beispiel DataTable mit dem Namen dt. Dies kann wie unten gezeigt visualisiert werden:

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

Einstieg in die Konvertierung

Sie haben also Ihren DataTable dt vor sich und fragen sich nun: "Wie konvertiere ich das?" Keine Sorge; das ist eine Frage, die Forschungsbereitschaft zeigt. Es gibt im Wesentlichen zwei Methoden, um DataTable in eine Liste umzuwandeln:

  1. Verwendung von LINQ (Language Integrated Query)
  2. Verwendung der klassischen foreach Schleife

Konvertierung mit LINQ

Die LINQ-Methode ist ein mächtiges Werkzeug in C#, das eine deklarative Art und Weise bietet, Sammlungen abzufragen. Werfen wir einen Blick darauf, wie dies gemacht werden kann.

Definieren Sie eine Methode wie folgt:

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

Im obigen Code wird die Erweiterungsmethode AsEnumerable() für DataTable dt aufgerufen. Dies ermöglicht es uns, LINQ auf jedes DataRow in DataTable anzuwenden. Die Methode erzeugt eine Liste dynamischer Objekte, von denen jedes eine Zeile aus der DataTable darstellt.

Konvertierung mit foreach Schleife

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

So funktioniert es:

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

In der Methode ForeachMethod wird die Liste DataTable mithilfe einer Schleife foreach durchlaufen. Für jedes DataRow wird ein neues Category-Objekt instanziiert und der Liste list hinzugefügt.

Erweiterung der fortgeschrittenen Konvertierungstechniken

Nachdem man die Grundlagen der Umwandlung eines DataTable in eine Liste in C# beherrscht, gibt es mehrere fortgeschrittene Techniken und Überlegungen, mit denen dieser Prozess optimiert und an komplexere Szenarien angepasst werden kann. Lassen Sie uns tiefer in einige dieser Techniken eintauchen.

Verwendung von Reflektion zur Konvertierung von DataTable in eine Liste

Reflection ist ein mächtiges Werkzeug in C#, das es Ihnen ermöglicht, die Metadaten von Typen zur Laufzeit zu inspizieren. Lassen Sie uns die Kraft nutzen:

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
$vbLabelText   $csharpLabel

Diese ConvertDataTableToList Methode verwendet Reflektion und iteriert über jedes DataRow und jede Spalte in der DataTable. Für jede Spalte sucht es nach einer passenden Eigenschaft im generischen Objekt und setzt deren Wert. Dieser Ansatz ermöglicht eine hochgradig wiederverwendbare Methode, die beliebige DataTable in eine Liste generischer Objekte umwandeln kann.

Nutzung

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)
$vbLabelText   $csharpLabel

Mit dieser Methode sind Sie nicht länger darauf beschränkt, spezifische Datentabellen in spezifische Objekttypen zu konvertieren. Stattdessen haben Sie ein vielseitiges Werkzeug zur Hand, das eine Vielzahl von Datenszenarien bewältigen kann.

Erwägungen zur Leistung

Obwohl die Reflection-Methode mächtig ist, ist es erwähnenswert, dass sie langsamer sein kann, insbesondere bei großen Datentabellen. Es ist immer wichtig, die Leistung zu messen und sie gegen die Vorteile der Code-Wiederverwendbarkeit und Wartbarkeit abzuwägen.

Iron Suite Toolkit für .NET-Entwickler

Obwohl wir uns eingehend mit den Feinheiten der Umwandlung von DataTable in Listen in C# befasst haben, kann die Verwendung externer Tools unseren Entwicklungsprozess manchmal vereinfachen, insbesondere bei komplexeren Operationen. Hier kommt die Iron Suite ins Spiel.

IronPDF: Das PDF-Kraftpaket

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

Wenn es darum geht, mit PDFs in C# zu arbeiten, ist IronPDF ein Game-Changer. Stellen Sie sich vor, Sie hätten Ihre DataTable in eine Liste umgewandelt und müssten daraus nun einen PDF-Bericht generieren. IronPDF kann problemlos PDFs erstellen, bearbeiten und Daten daraus extrahieren, und so den Prozess der Übersetzung Ihrer aus der Datentabelle gewonnenen Informationen in professionell aussehende Berichte rationalisieren.

Die Hauptfunktionalität von IronPDF ist seine HTML-zu-PDF-Funktion, die sicherstellt, dass Layouts und Stile beibehalten werden. Es generiert PDFs aus Webinhalt, geeignet für Berichte, Rechnungen und Dokumentation. Sie können HTML-Dateien, URLs und HTML-Strings mühelos in PDF-Dateien konvertieren.

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: Herausragend in Excel-Operationen

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

Wenn Ihre DataTable-Konvertierung zu einem Bedarf an Excel-bezogenen Aufgaben führt, ist IronXL das richtige Werkzeug dafür. Dieses Produkt bietet nahtlose Operationen zum Lesen, Bearbeiten und Erstellen von Excel-Tabellenkalkulationen. Mit der Konvertierung von Datentabellen zu Listen in der Hand wird der Export Ihrer Daten in ein Excel-Format mit IronXL unglaublich einfach.

IronOCR: Text wiedererkennbar machen

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

Es kann vorkommen, dass Ihre DataTable aus bildbasierten Daten besteht oder dass Sie Text aus Bildern extrahieren müssen. Hier kommt IronOCR ins Spiel. Es ermöglicht .NET Entwicklern, Text aus Bildern zu lesen und ist somit ein ergänzendes Werkzeug, wenn Ihre DataTable Konvertierungsvorgänge Bilder mit Textinformationen beinhalten.

IronBarcode: Zwischen den Zeilen lesen

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

Schließlich ist IronBarcode das Werkzeug der Wahl für alle Barcode-Operationen in Ihren Anwendungen. Angenommen, Ihre DataTable-Liste oder die Liste, in die Sie sie konvertiert haben, besteht aus Produktinformationen mit Barcodes. In diesem Fall bietet IronBarcode einen effizienten Mechanismus zum Lesen und Erzeugen von Barcodes, der die Lücke zwischen Rohproduktdaten und scannbaren Barcodeinformationen schließt.

Abschluss

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

Während die manuellen Methoden zur Manipulation und Konvertierung von DataTable für jeden C#-Entwickler unerlässlich sind, kann die Integration leistungsstarker Tools wie denen von Iron Suite Ihre Produktivität und Fähigkeiten exponentiell steigern. Es ist bemerkenswert, dass jede Produktlizenz mit $999 beginnt, und noch attraktiver ist, dass jedes Produkt eine kostenlose Testversion bietet. Wenn Sie darüber nachdenken, in diese Tools zu investieren, gibt es ein verlockendes Angebot: Sie können die gesamte Iron Suite für den Preis von nur zwei Produkten erwerben. Solche umfassenden Lösungen zu erkennen, kann zweifellos die Qualität und Effizienz Ihrer .NET-Entwicklungsbemühungen erheblich steigern.

Häufig gestellte Fragen

Was ist ein DataTable in C#?

Ein DataTable in C# ist eine In-Memory-Darstellung einer Datenbanktabelle, bestehend aus Zeilen und Spalten. Es ist Teil des System.Data-Namespace.

Wie kann ich ein DataTable in eine Liste in C# mit LINQ konvertieren?

Sie können ein DataTable mit LINQ in eine Liste umwandeln, indem Sie die Methode AsEnumerable() verwenden, um über jede DataRow zu iterieren und Select nutzen, um eine Liste von dynamischen Objekten zu erstellen, die jede Zeile darstellen.

Wie funktioniert der Prozess der Umwandlung eines DataTable in eine Liste mit einer foreach-Schleife in C#?

Um ein DataTable mit einer foreach-Schleife in eine Liste umzuwandeln, iterieren Sie über jede DataRow, erstellen Sie ein neues Objekt für jede Zeile, füllen Sie dessen Eigenschaften aus der DataRow, und fügen Sie es einer Liste hinzu.

Wie verbessert Reflection die DataTable-Umwandlung in C#?

Die Verwendung von Reflection ermöglicht eine hochgradig wiederverwendbare Methode, die jedes DataTable in eine Liste von generischen Objekten umwandeln kann, indem DataTable-Spalten dynamisch auf Objekteigenschaften abgebildet werden.

Wie kann IronPDF bei der Verarbeitung von PDFs aus DataTables helfen?

IronPDF ermöglicht es Entwicklern, PDF-Dokumente zu erstellen, zu bearbeiten und Daten daraus zu extrahieren, was nützlich ist, um Berichte aus von DataTable abgeleiteten Daten zu generieren.

Welche Vorteile bietet IronXL für Excel-Operationen in C#?

IronXL erleichtert den Export von Daten aus DataTables in das Excel-Format, sodass Entwickler Excel-Tabellen einfach lesen, bearbeiten und effizient erstellen können.

Auf welche Weise kann IronOCR auf DataTables angewendet werden?

IronOCR kann Text aus Bildern innerhalb von DataTables lesen, sodass Entwickler bildbasierte Daten, die Textinformationen enthalten, verarbeiten können.

Wie verbessert IronBarcode die DataTable-Operationen mit Barcodes?

IronBarcode bietet die Möglichkeit, Barcodes zu lesen und zu erzeugen, was vorteilhaft ist für DataTables oder Listen, die Produktinformationen mit Barcodes enthalten.

Welche Leistungsgesichtspunkte sollten bei der Verwendung von Reflection zur DataTable-Umwandlung berücksichtigt werden?

Obwohl Reflection Flexibilität bietet, kann es langsamer als andere Methoden sein, insbesondere bei großen Datentabellen, daher ist es wichtig, die Leistung mit Wiederverwendbarkeit und Wartbarkeit in Einklang zu bringen.

Gibt es Lizenzierungs- und Testmöglichkeiten für Iron Software-Produkte?

Ja, der Artikel erwähnt, dass es Lizenzierungs- und Testmöglichkeiten für die Iron Suite-Produkte gibt, die es Entwicklern ermöglichen, die Werkzeuge vor dem Kauf zu evaluieren.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der Pionierarbeit in der C# PDF-Technologie leistet. Als der ursprüngliche Entwickler hinter der Kern-Codebasis von Iron Software hat er die Produktarchitektur des Unternehmens seit seiner Gründung geprägt und es zusammen mit CEO ...

Weiterlesen

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an