在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在使用C#進行程式設計的過程中,經常會需要將DataTable
轉換成清單。許多初學者在遇到這個任務時,往往會發現現有的答案不夠全面。本教程旨在彌補這一差距,提供一個清晰的指南,說明如何在C#中將DataTable
轉換成清單。
DataTable
?在進入轉換過程之前,了解 DataTable
是什麼是至關重要的。 DataTable
在 C# 中,DataTable
對象是帶有行和列的內存數據庫表的表示。它是 System.Data
命名空間的一部分。
為了這個教程,我們使用一個名為 DataTable dt
的示例 DataTable
。DataTable 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")
所以,你已經得到了你的 DataTable dt
,現在你正在思考,"我該如何轉換這個?" 別擔心,這是一個顯示研究努力的問題。主要有兩種方法將 DataTable
轉換為列表:
使用 LINQ (語言集成查詢)
foreach loop
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
請注意使用 var list
、var row
和 linq 方法
。在上述程式碼中,擴展方法 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
在 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
在掌握了將 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
這個 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)
使用此方法,不再局限於將特定數據表轉換為特定的物件類型。相反,您可以使用一個多功能工具來處理各種數據情境。
雖然反射方法功能強大,但值得注意的是,面對大型數據表時,它的速度可能較慢。始終要重要的是測量性能,並將其與代碼的可重複使用性和可維護性之間的好處進行權衡。
雖然我們已經深入探討了如何在 C# 中將 DataTable
轉換為列表的細節,但有時候,依賴外部工具可以簡化我們的開發過程,特別是當涉及到更複雜的操作時。這時 Iron Suite 就能派上用場。 Iron Suite 發揮作用。
Iron Suite 是一個綜合工具套件,旨在使 .NET 開發者的生活更輕鬆。從 PDF 操作和 Excel 操作到光學字符識別 (光學字符識別) 以及條碼讀取,Iron Suite 提供了無數的功能。讓我們分解 Iron Suite 的組成部分,看看它們如何補充我們的 DataTable
操作。
當涉及在 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
如果你的 DataTable
轉換需要進行與 Excel 相關的任務, IronXL 是您值得信賴的工具。這款產品提供讀取、編輯和創建 Excel 試算表的無縫操作。有了數據表格到列表的轉換功能,使用 IronXL 將數據導出到 Excel 格式變得非常簡單。
有時您的 DataTable
可能包含基於圖像的數據,或者您需要從圖像中提取文本。這就是 IronOCR 它讓 .NET 開發人員能夠從圖像中讀取文本,使其成為在 DataTable
轉換操作中涉及包含文字信息的圖像時的補充工具。
最後, IronBarcode 是您應用程式中任何條碼操作的首選工具。假設您的 DataTable
或您已轉換為其列表的內容包含有條碼的產品資訊,那麼 IronBarcode 提供了一個高效的機制來讀取和生成條碼,彌合原始產品數據與可掃描條碼資訊之間的鴻溝。
雖然手動方法操作和轉換 DataTable
對任何 C# 開發者來說都是至關重要的,但集成像 Iron Suite 提供的強大工具可以極大地提高你的生產力和能力。值得注意的是,每個產品的許可證從 Lite License
開始,更吸引人的是每個產品都提供一個 免費試用如果您正在考慮投資這些工具,這裡有一個誘人的優惠:您可以 購買整個 Iron Suite 只需兩個產品的價格。採用這樣的綜合解決方案無疑可以提升您 .NET 開發工作的質量和效率。