在生產環境中測試,無水印。
在任何需要的地方都能運行。
獲得 30 天的全功能產品。
在幾分鐘內上手運行。
試用產品期間完全訪問我們的支援工程團隊
在使用 C# 程式設計的領域中,經常需要將 DataTable
轉換為列表。許多新手在碰到這項任務時,通常會面臨不夠全面的答案。 本教程旨在填補這一空白,並提供有關如何在 C# 中將 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 迴圈
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()
方法中,使用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)
使用此方法,不再局限於將特定數據表轉換為特定的物件類型。相反,您可以使用一個多功能工具來處理各種數據情境。
雖然反射方法非常強大,但值得注意的是,在處理大型數據表時,它可能會比較慢。 衡量效能並將其與程式碼重用性和可維護性的好處進行比較始終至關重要。
儘管我們已深入探討了將DataTable
轉換為C#中的列表的細節,但有時依賴外部工具可以簡化我們的開發過程,尤其是當涉及到更複雜的操作時。 這就是Iron Suite發揮作用的地方。
Iron Suite 是一個全面的工具套件,旨在讓 .NET 開發者的生活更輕鬆。 從 PDF 操作和 Excel 操作到光學字符識別(OCR)和條碼閱讀,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 開發工作的品質和效率。