Zum Fußzeileninhalt springen
.NET HILFE

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

Konvertierung von DataTable in List in C

Oft besteht im Bereich der Programmierung mit C# die Notwendigkeit, eine DataTable in eine Liste zu konvertieren. Viele Anfänger stolpern über diese Aufgabe und treffen oft auf Antworten, die einfach nicht umfassend genug sind. Dieses Tutorial zielt darauf ab, diese Lücke zu schließen und eine klare Anleitung zu bieten, wie eine DataTable in C# in eine Liste konvertiert werden kann.

Was ist eine DataTable?

Bevor wir in den Konvertierungsprozess einsteigen, ist es entscheidend, zu verstehen, was eine DataTable ist. In C# ist ein DataTable-Objekt eine Darstellung einer In-Memory-Datenbanktabelle mit Zeilen und Spalten. Es ist Teil des System.Data-Namespaces.

Für dieses Tutorial verwenden wir ein Beispiel einer DataTable namens 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

Also, Sie haben Ihre DataTable dt und denken 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 zu konvertieren:

  1. Verwendung von LINQ (Language Integrated Query)
  2. Verwenden 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() auf der DataTable dt aufgerufen. Dies ermöglicht es uns, LINQ auf jede DataRow in der DataTable anzuwenden. Die Methode erstellt eine Liste dynamischer Objekte, die jeweils eine Zeile aus der DataTable darstellen.

Umwandlung mit foreach Schleife

Die foreach-Schleife ist ein bewährter Weg, um über Sammlungen in C# 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 ForeachMethod-Methode wird die DataTable mit einer foreach-Schleife durchlaufen. Für jede DataRow wird ein neues Category-Objekt erstellt und der Liste hinzugefügt.

Erweiterung der fortgeschrittenen Konvertierungstechniken

Nachdem Sie die Grundlagen der Konvertierung einer DataTable in eine Liste in C# beherrschen, gibt es mehrere fortgeschrittene Techniken und Überlegungen, die diesen Prozess optimieren und an komplexere Szenarien anpassen können. Lassen Sie uns tiefer in einige dieser Techniken eintauchen.

Nutzung von Reflection zur Umwandlung von DataTable in List

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)(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

Diese ConvertDataTableToList-Methode verwendet Reflection und iteriert über jede DataRow und 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 hoch wiederverwendbare Methode, die jede 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

Auch wenn wir uns mit den Feinheiten der Konvertierung von DataTable in Listen in C# beschäftigt haben, kann manchmal das Vertrauen in externe Tools unseren Entwicklungsprozess vereinfachen, insbesondere wenn es um komplexere Operationen geht. Hier kommt die Iron Suite ins Spiel.

IronPDF: Das PDF-Kraftpaket

C# DataTable zu Liste (Wie es für Entwickler funktioniert) Abbildung 1 - IronPDF für .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 haben Ihre DataTable in eine Liste konvertiert und müssen dann einen PDF-Bericht daraus erstellen. 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 (Wie es für Entwickler funktioniert) Abbildung 2 - IronXL für .NET: Die C# Excel-Bibliothek

Wenn Ihre DataTable-Konvertierung zu einem Bedarf an Excel-bezogenen Aufgaben führt, ist IronXL das Werkzeug, auf das Sie zurückgreifen sollten. 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 (Wie es für Entwickler funktioniert) Abbildung 3 - IronOCR für .NET: Die C# OCR-Bibliothek

Es kann Zeiten geben, in denen Ihre DataTable aus bildbasierten Daten besteht oder Sie Text aus Bildern extrahieren müssen. Hier kommt IronOCR ins Spiel. Es erlaubt .NET-Entwicklern, Text aus Bildern zu lesen und ist 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 für .NET: Die C# Barcode-Bibliothek

Schließlich ist IronBarcode das Werkzeug der Wahl für alle Barcode-Operationen in Ihren Anwendungen. Angenommen, Ihre DataTable oder die Liste, in die Sie sie konvertiert haben, enthält 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 (Wie es für Entwickler funktioniert) Abbildung 5 - Iron Suite: Lizenzinformationen

Obwohl die manuellen Methoden zur Manipulation und Konvertierung von DataTable für jeden C#-Entwickler entscheidend sind, kann die Integration leistungsstarker Tools wie der von Iron Suite Ihre Produktivität und Fähigkeiten exponentiell steigern. Bemerkenswert ist, dass jede Produktlizenz ab $799 beginnt, und was noch verlockender 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 sehr wiederverwendbare Methode, die jedes DataTable in eine Liste von generischen Objekten umwandeln kann, indem DataTable-Spalten dynamisch auf Objekteigenschaften abgebildet werden.

Wie kann Iron PDF bei der Verarbeitung von PDFs aus DataTables helfen?

Iron PDF 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 Iron XL für Excel-Operationen in C#?

Iron XL 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 Iron OCR auf DataTables angewendet werden?

Iron OCR 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 Test- und Lizenzierungsmöglichkeiten für Iron Software-Produkte?

Ja, der Artikel erwähnt, dass es Test- und Lizenzierungsmö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 führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen