.NET 幫助

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

發佈 2023年11月14日
分享:

在使用C#進行程式設計的過程中,經常會需要將DataTable轉換成清單。許多初學者在遇到這個任務時,往往會發現現有的答案不夠全面。本教程旨在彌補這一差距,提供一個清晰的指南,說明如何在C#中將DataTable轉換成清單。

什麼是 DataTable

在進入轉換過程之前,了解 DataTable 是什麼是至關重要的。 DataTable 在 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 loop

使用 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 rowlinq 方法。在上述程式碼中,擴展方法 AsEnumerable()在 DataTable dt 上被调用。这允许我们在 DataTable 中的每个 DataRow 行上使用 LINQ。

使用 Foreach 迴圈進行轉換

foreach 迴圈 是在 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()方法中,使用foreach 迴圈遍歷DataTable。對於每個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#

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

性能考量

雖然反射方法功能強大,但值得注意的是,面對大型數據表時,它的速度可能較慢。始終要重要的是測量性能,並將其與代碼的可重複使用性和可維護性之間的好處進行權衡。

適用於 .NET 開發人員的 Iron Suite 工具包

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

Iron Suite 是一個綜合工具套件,旨在使 .NET 開發者的生活更輕鬆。從 PDF 操作和 Excel 操作到光學字符識別 (光學字符識別) 以及條碼讀取,Iron Suite 提供了無數的功能。讓我們分解 Iron Suite 的組成部分,看看它們如何補充我們的 DataTable 操作。

IronPDF:PDF 強大動力

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

當涉及在 C# 中處理 PDFs 時, 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 提供的強大工具可以極大地提高你的生產力和能力。值得注意的是,每個產品的許可證從 Lite License 開始,更吸引人的是每個產品都提供一個 免費試用如果您正在考慮投資這些工具,這裡有一個誘人的優惠:您可以 購買整個 Iron Suite 只需兩個產品的價格。採用這樣的綜合解決方案無疑可以提升您 .NET 開發工作的質量和效率。

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

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

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >