.NET 幫助

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

在使用 C# 程式設計的領域中,經常需要將 DataTable 轉換為列表。許多新手在碰到這項任務時,通常會面臨不夠全面的答案。 本教程旨在填補這一空白,並提供有關如何在 C# 中將 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")
$vbLabelText   $csharpLabel

開始使用轉換

所以,你有了你的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
$vbLabelText   $csharpLabel

注意使用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
$vbLabelText   $csharpLabel

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

擴展高級轉換技術

在掌握了將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
$vbLabelText   $csharpLabel

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

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

效能考量

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

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

儘管我們已深入探討了將DataTable轉換為C#中的列表的細節,但有時依賴外部工具可以簡化我們的開發過程,尤其是當涉及到更複雜的操作時。 這就是Iron Suite發揮作用的地方。

Iron Suite 是一個全面的工具套件,旨在讓 .NET 開發者的生活更輕鬆。 從 PDF 操作和 Excel 操作到光學字符識別(OCR)和條碼閱讀,Iron Suite 提供了豐富的功能。 讓我們分解 Iron Suite 的各個元件,看看它們如何補充我們的 DataTable 操作。

IronPDF:PDF 強大引擎

C# DataTable to 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
$vbLabelText   $csharpLabel

IronXL:在Excel操作中脫穎而出

C# DataTable 轉換為 List(開發人員如何使用)圖 2 - IronXL for .NET:C# Excel 庫

如果您的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 開發工作的品質和效率。

Chipego
奇佩戈·卡林达
軟體工程師
Chipego 擁有天生的傾聽技能,這幫助他理解客戶問題,並提供智能解決方案。他在獲得信息技術理學學士學位後,于 2023 年加入 Iron Software 團隊。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但隨著他每天找到新的方法來支持客戶,他對所有產品的了解也在不斷增長。他喜歡在 Iron Software 的協作生活,公司內的團隊成員從各自不同的經歷中共同努力,創造出有效的創新解決方案。當 Chipego 離開辦公桌時,他常常享受讀好書或踢足球的樂趣。
< 上一頁
C# 網頁應用程式(適用於開發人員的工作方式)
下一個 >
C# ref 關鍵字(開發者如何運作)