在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在使用 C# 編程時,經常需要將 DataTable
轉換為列表。許多初學者在遇到這項任務時,常常得到的答案不夠全面。 本教程旨在弥合这一差距,并提供一个关于如何在C#中将DataTable
转换为列表的清晰指南。
DataTable
?在深入轉換過程之前,了解什麼是DataTable
is. 在 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 迴圈
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
和 linqmethod
。 在上面的代碼中,擴展方法 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
在 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
在掌握了將 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是一套全面的工具套件,旨在讓 .NET 開發人員的生活更輕鬆。 從 PDF 操作和 Excel 操作到光學字符識別(光學字符識別)以及條碼讀取,Iron Suite 提供多種功能。 讓我們來分析 Iron Suite 的組件,看看它們如何能補充我們的 DataTable
操作。
在使用 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
如果您的 DataTable
轉換導致需要 Excel 相關的任務,IronXL是值得依靠的工具。 該產品提供流暢的操作,用於讀取、編輯和創建Excel電子表格。 掌握數據表轉換為列表後,使用IronXL將數據匯出為Excel格式變得極其簡單。
有時候你的 DataTable
可能包含基於圖像的數據,或者你需要從圖像中提取文本。 這就是IronOCR閃閃發光。 它使 .NET 開發者能夠從圖像中讀取文本,如果你的 DataTable
轉換操作涉及包含文字信息的圖像,那麼它就是一個互補的工具。
最後,IronBarcode是您的應用程式中進行任何條碼操作的首選工具。 假設您的 DataTable
或您已轉換為的列表包含帶有條碼的產品資訊。 在這種情況下,IronBarcode 提供了一種有效的機制來讀取和生成條碼,橋接了原始產品數據和可掃描條碼信息之間的差距。
雖然手動操作和轉換 DataTable
的方法對任何 C# 開發者來說都至關重要,但整合像 Iron Suite 提供的這類強大工具可以成倍提高您的生產力和能力。 值得注意的是,每個產品許可證起始於 $749,更吸引人的是每個產品都提供一個免費試用. 如果您正在考慮投資這些工具,有一個誘人的優惠在等著您:您可以購買整個 Iron Suite僅需兩款產品的價格。 採用這些全面的解決方案無疑可以提升您的 .NET 開發工作的品質和效率。