.NET 幫助

C# Datatable 轉換為 List(開發人員如何使用)

發佈 2023年11月14日
分享:

在使用 C# 編程時,經常需要將 DataTable 轉換為列表。許多初學者在遇到這項任務時,常常得到的答案不夠全面。 本教程旨在弥合这一差距,并提供一个关于如何在C#中将DataTable转换为列表的清晰指南。

什麼是 DataTable

在深入轉換過程之前,了解什麼是DataTableis. 在 C# 中,DataTable 物件是記憶體中資料庫表格的表示,具有行和列。 它是 System.Data 命名空間的一部分。

在本教程中,我們使用一個名為 DataTable dt 的範例 DataTableDataTable dt 可以通过以下代码示例进行可视化:

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#

開始使用轉換

所以,你有了你的 DataTable dt,現在你正在考慮,「我要如何轉換這個?」。 不用擔心; 這是一個顯示研究努力的問題。 DataTable 轉換為列表主要有兩種方法:

  1. 使用LINQ (語言集成查詢)

  2. 使用經典的 foreach 迴圈

使用 LINQ 進行轉換

LINQ 方法是 C# 中的一個強大工具,提供了一種以宣告式方式查詢集合的方法。 讓我們來看看這是怎麼做到的。

定義方法如下代碼範例:

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#

注意使用 var listvar rowlinqmethod。 在上面的代碼中,擴展方法 AsEnumerable()DataTable dt 上被調用。 這使我們能夠在 DataTable 中的每個 DataRow row 使用 LINQ。

使用 Foreach 迴圈進行轉換

foreach loop 是在 C# 中遍歷集合的經典方式。 此方法可能看起來稍微長了一點,但易於理解和實施。

開始:

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#

private static void ForeachMethod()DataTable使用foreach loop進行迭代的方法。 對於每個datarow row,會實例化一個新的var category對象並將其添加到var list`。

要表示類別,您需要一個類別:

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#

擴展高級轉換技術

在掌握了將 DataTable 轉換為 C# 中列表的基本知識後,有幾種高級技術和考慮因素可以優化這一過程,並將其適應更複雜的場景。 讓我們更深入地探討一些這些技術。

之前討論的方法之一個限制是它們僅適用於我們的 Category 類別。 如果您可以編寫一個方法來將任何 DataTable 轉換為通用物件清單呢?

使用反射將 DataTable 轉換為列表

反射是C#中的一個強大工具,允許您在運行時檢查類型的元數據。讓我們利用它的力量。

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#

private static 方法利用反射遍歷 DataTable dt 中的每個 DataRow row 和列。 對於每個列,會搜尋匹配的屬性。(var prop)在通用物件中設置其值。 此方法允許將任何 DataTable 轉換為通用物件列表,從而實現高度可重用的方法。

用法

要使用上述代碼,只需通過指定類型來調用該方法:

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

使用此方法,不再局限於將特定數據表轉換為特定的物件類型。相反,您可以使用一個多功能工具來處理各種數據情境。

效能考量

雖然反射方法非常強大,但值得注意的是,在處理大型數據表時,它可能會比較慢。 衡量效能並將其與程式碼重用性和可維護性的好處進行比較始終至關重要。

Iron Suite 工具包供 .NET 開發者使用

雖然我們已深入探討了在 C# 中將 DataTable 轉換為列表的細節,有時候,依賴外部工具可以簡化我們的開發過程,特別是當涉及到更複雜的操作時。 那就是...Iron Suite發揮作用。

Iron Suite是一套全面的工具套件,旨在讓 .NET 開發人員的生活更輕鬆。 從 PDF 操作和 Excel 操作到光學字符識別(光學字符識別)以及條碼讀取,Iron Suite 提供多種功能。 讓我們來分析 Iron Suite 的組件,看看它們如何能補充我們的 DataTable 操作。

IronPDF:PDF 強大引擎

C# DataTable 轉換為 List(開發人員操作方式)圖 1 - IronPDF for .NET:C# PDF 庫

在使用 C# 處理 PDF 時,IronPDF是一個改變遊戲規則的產品。 想像一下,你將 DataTable 轉換為列表,然後需要從中生成一份 PDF 報告。 IronPDF 可以輕鬆地創建、編輯和提取 PDF 文件中的數據,簡化將資料表派生的信息轉換為專業報告的過程。

IronPDF 的主要功能是其HTML轉PDF功能性,確保佈局和樣式得到保留。 它從網頁內容生成 PDF,適合用於報告、發票和文檔。 您可以輕鬆地將 HTML 文件、網址和 HTML 字串轉換為 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");
    }
}
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:在Excel操作中脫穎而出

C# DataTable 轉換為 List(開發人員的工作原理) 圖 2 - IronXL for .NET: The C# Excel Library

如果您的 DataTable 轉換導致需要 Excel 相關的任務,IronXL是值得依靠的工具。 該產品提供流暢的操作,用於讀取、編輯和創建Excel電子表格。 掌握數據表轉換為列表後,使用IronXL將數據匯出為Excel格式變得極其簡單。

IronOCR:使文字可識別

C# DataTable 到 List(對開發人員的工作原理)圖 3 - IronOCR for .NET:C# OCR 函式庫

有時候你的 DataTable 可能包含基於圖像的數據,或者你需要從圖像中提取文本。 這就是IronOCR閃閃發光。 它使 .NET 開發者能夠從圖像中讀取文本,如果你的 DataTable 轉換操作涉及包含文字信息的圖像,那麼它就是一個互補的工具。

IronBarcode:讀懂細節

從 C# DataTable 到列表(它對開發人員的工作原理)圖 4 - IronBarcode for .NET:C# 條碼庫

最後,IronBarcode是您的應用程式中進行任何條碼操作的首選工具。 假設您的 DataTable 或您已轉換為的列表包含帶有條碼的產品資訊。 在這種情況下,IronBarcode 提供了一種有效的機制來讀取和生成條碼,橋接了原始產品數據和可掃描條碼信息之間的差距。

結論

C# DataTable 轉換為列表(開發人員如何使用)圖 5 - Iron Suite: 授權資訊

雖然手動操作和轉換 DataTable 的方法對任何 C# 開發者來說都至關重要,但整合像 Iron Suite 提供的這類強大工具可以成倍提高您的生產力和能力。 值得注意的是,每個產品許可證起始於 $749,更吸引人的是每個產品都提供一個免費試用. 如果您正在考慮投資這些工具,有一個誘人的優惠在等著您:您可以購買整個 Iron Suite僅需兩款產品的價格。 採用這些全面的解決方案無疑可以提升您的 .NET 開發工作的品質和效率。

< 上一頁
C# 網頁應用程式(適用於開發人員的工作方式)
下一個 >
C# ref 關鍵字(開發者如何運作)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,810,873 查看許可證 >