跳過到頁腳內容
.NET幫助

C# Datatable 轉換為列表(開發者的工作原理)

Converting DataTable to List in C

在 C# 程式設計領域,經常會遇到需要將字串轉換為清單的情況。許多新手都會遇到這個問題,但他們找到的答案往往不夠全面。 本教程旨在彌合這一差距,並提供一個清晰的指南,說明如何在 C# 中將 DataTable 轉換為清單。

什麼是 DataTable

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

為了本教學的目的,我們使用一個名為 dt 的範例 DataTable。 如下圖所示:

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");
$vbLabelText   $csharpLabel

轉化入門

所以,你現在有了 DataTable dt,然後你盯著它想,"我該如何轉換它?" 不用擔心; 這是一個能夠體現研究力度的問題。 將 DataTable 轉換為清單主要有兩種方法:

  1. 使用LINQ (語言整合查詢)
  2. 使用經典的 foreach 循環

使用 LINQ 進行轉換

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

定義方法如下:

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();
}
$vbLabelText   $csharpLabel

在上面的程式碼中,對 DataTable dt 呼叫了擴充方法 AsEnumerable()。 這樣我們就可以在 DataRow 中對 DataTable 中的每個 DataRow 使用 LINQ。 此方法建立了一個動態物件列表,每個物件代表來自 DataTable 的一行。

使用 foreach 循環進行轉換

foreach 迴圈是 C# 中遍歷集合的一種經過驗證的方法。 這種方法看起來可能稍微長一些,但它很容易理解和實施。

它的運作方式如下:

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

ForeachMethod 方法中,使用 foreach 循環遍歷 DataTable。對於每個 DataRow,實例化一個新的 Category 物件並將其新增至 list

擴展高階轉換技術

在掌握了將 DataTable 轉換為 C# 清單的基礎知識之後,還有一些高級技巧和注意事項可以優化此過程並將其適應更複雜的場景。 讓我們更深入地探討一下其中的一些技巧。

使用反射將 DataTable 轉換為列表

反射是 C# 中一個強大的工具,它允許你在運行時檢查類型的元資料。讓我們來充分利用它的強大功能:

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

ConvertDataTableToList 方法採用反射,遍歷 DataRow 中的每個 DataTable 列。 對於每一列,它在通用物件中尋找匹配的屬性並設定其值。 這種方法允許使用高度可重用的方法,可以將任何 DataTable 轉換為通用物件清單。

用法

要使用上述程式碼,只需透過指定類型來呼叫該方法即可:

List<Category> categories = ConvertDataTableToList<Category>(dt);
List<Category> categories = ConvertDataTableToList<Category>(dt);
$vbLabelText   $csharpLabel

使用這種方法,您不再局限於將特定的資料表轉換為特定的物件類型。相反,您將擁有一個功能強大的工具,可以處理各種資料場景。

性能考量

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

面向.NET開發人員的Iron Suite工具包

雖然我們已經深入研究了在 C# 中將 DataTable 轉換為清單的複雜性,但有時,依賴外部工具可以簡化我們的開發過程,尤其是在處理更複雜的操作時。 這時Iron Suite就派上用場了。

IronPDF:PDF 巨頭

C# DataTable 轉 List(開發者使用方法)圖 1 - IronPDF for .NET:C# PDF 庫

在 C# 中處理 PDF 檔案時, IronPDF是一款顛覆性的工具。 想像一下,你已經將 DataTable 轉換成了一個列表,然後需要從中產生一個 PDF 報告。 IronPDF可以輕鬆建立、編輯和提取 PDF 文件中的數據,簡化將數據表中的資訊轉換為專業外觀報告的流程。

IronPDF 的主要特點是其HTML 轉 PDF功能,可確保佈局和樣式得以保留。 它可以根據網頁內容產生 PDF 文件,適用於報告、發票和文件。 您可以輕鬆地將 HTML 檔案、URL 和 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");
    }
}
$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 轉 List(開發者使用方法)圖 4 - IronBarcode for .NET:C# 條碼庫

最後, IronBarcode是您應用程式中任何條碼操作的首選工具。 假設您的 DataTable 或您將其轉換後的清單包含帶有條碼的產品資訊。 在這種情況下, IronBarcode提供了一種高效的讀取和產生條碼的機制,彌合了原始產品資料和可掃描條碼資訊之間的差距。

結論

C# DataTable 轉 List(開發者使用方法)圖 5 - Iron Suite:許可資訊

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

常見問題解答

什麼是 C# 中的 DataTable?

C# 中的 DataTable 是一個在記憶體中的資料庫表格表示,由行和列組成。它是 System.Data 命名空間的一部分。

如何使用 LINQ 將 DataTable 轉換為 C# 中的清單?

您可以使用 LINQ 將 DataTable 轉換為清單,通過利用 AsEnumerable() 方法遍歷每個 DataRow 並使用 Select 創建代表每行的動態物件清單。

使用 foreach 迴圈在 C# 中將 DataTable 轉換為清單的過程是什麼?

要使用 foreach 迴圈將 DataTable 轉換為清單,請遍歷每個 DataRow,為每行實例化一個新物件,從 DataRow 中填充其屬性,然後將其添加到清單中。

反射如何增強 C# 中的 DataTable 轉換?

使用反射允許高度可重用的方法,通過動態地將 DataTable 列映射到物件屬性,將任何 DataTable 轉換為泛型物件清單。

IronPDF 如何幫助處理從 DataTables 派生的 PDF?

IronPDF 允許開發人員創建、編輯和提取 PDF 文件中的數據,這對於生成從 DataTable 派生的數據報告非常有用。

IronXL 在 C# 中的 Excel 操作優勢?

IronXL 促進了從 DataTables 到 Excel 格式的數據導出,允許開發人員輕鬆地閱讀、編輯和創建 Excel 試算表。

IronOCR 可以以哪些方式應用於 DataTables?

IronOCR 可以從 DataTables 中的圖像讀取文本,讓開發人員能夠處理含有文本信息的圖像數據。

IronBarcode 如何增強與條碼相關的 DataTable 操作?

IronBarcode 提供讀取和生成條碼的能力,這對於包含條碼的產品信息的 DataTables 或清單很有利。

在使用反射進行 DataTable 轉換時需要考慮哪些性能因素?

雖然反射提供了靈活性,但尤其對於大型數據表來說,可能會比其他方法慢,因此需要平衡性能與重用性和可維護性。

Iron Software 產品是否有可用的授權和試用機會?

是的,文章提到 Iron Suite 產品有可用的授權和試用機會,允許開發人員在購買前評估這些工具。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me