Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
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.
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")
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:
Verwendung von LINQ (Sprache Integrierte Abfrage)
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
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.
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
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
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?
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
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.
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)
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.
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.
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.
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
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.
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.
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.
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.
9 .NET API-Produkte für Ihre Bürodokumente