C# 中的 DataTable – 用法和示例
DataTable 是 C# 数据处理的重要组成部分,但对于初学者和不常使用的人来说,它可能相当棘手。那么,准备好揭开 C# DataTable 的神秘面纱了吗?让我们一起渡过难关,成为 DataTable 的冠军!
简介:什么是DataTable
在 C# 中,DataTable 就像一个驻留在计算机内存中的微型数据库,代表着一张内存数据表。想象一下在如此小的空间里拥有一个完整的数据库,是不是很令人兴奋?
了解 C# DataTable 及其核心功能
DataTable 是 ADO.NET 的一部分,ADO.NET 是 Microsoft 在 .NET 框架中使用的数据访问模型。它表示包含列和行集合的单个数据表。DataTable 可以是独立的,也可以是 DataSet 的一部分,DataSet 可以容纳多个 DataTable 对象。
// Create a new DataTable
DataTable dt = new DataTable();
看,我们刚刚创建了一个新的 DataTable!
深入研究数据表的创建
让我们更深入地了解一下 DataTable 的创建过程。它就像烘焙,只不过我们用的是列和行,而不是面粉和鸡蛋。
如何创建数据表
创建 DataTable 涉及声明 DataTable 类的新实例。
DataTable table = new DataTable("Customers");
我们创建了一个名为“客户”的新表。谁说编程不能有趣!
向数据表添加列
拥有表格固然很好,但是没有列的表格又算什么呢?
table.Columns.Add("CustomerID", typeof(int));
table.Columns.Add("CustomerName", typeof(string));
就像一位自豪的厨师一样,我们刚刚在“客户”表中添加了两列!
填充数据表
创建表并添加列只是一个开始。现在,我们将添加表的命脉——数据!
将 DataRow 添加到 DataTable
DataRow 表示 DataTable 中的一行。添加方法如下:
DataRow row = table.NewRow();
row["CustomerID"] = 1;
row["CustomerName"] = "John Doe";
table.Rows.Add(row);
通过这几行代码,我们的客户表就有了第一行数据!
数据表和行添加:从头开始构建 C# 数据表
从零开始构建 DataTable 会给我们一个空白的画布。创建表,定义列,然后添加行。这就像生出一张新表,不是吗?
DataTable table = new DataTable("Orders");
table.Columns.Add("OrderID", typeof(int));
table.Columns.Add("OrderAmount", typeof(decimal));
DataRow row = table.NewRow();
row["OrderID"] = 101;
row["OrderAmount"] = 150.75m;
table.Rows.Add(row);
我们灵巧地创建了一个包含一行数据的新订单表!C# 是不是很棒?
学习在 C# 中操作 DataTable:从简单到复杂的操作
现在我们的 DataTable 已经充满了数据,让我们来学习如何使用它。技艺高超的魔术师从不泄露他的秘密,但在这里,我们打破常规!
从数据表获取列值
从 DataRow 访问列值与从数组或字典访问值类似。请看这个巧妙的技巧:
DataRow row = table.Rows[0];
int orderId = row.Field<int>("OrderID");
decimal amount = row.Field<decimal>("OrderAmount");
你知道破解密码的感觉吗?就是这个!
迭代 DataTable
围绕 DataTable 运行一圈,或者用编程术语来说,对 DataTable 进行迭代,就像一项有趣的运动!
foreach (DataRow row in table.Rows){
int orderId = row.Field<int>("OrderID");
decimal amount = row.Field<decimal>("OrderAmount");
}
还有什么比庆祝胜利更棒的呢?绕着你的 DataTable 跑一圈!
比较 DataTable 的列值
通常,你需要比较 DataTable 中的列值。这就像一个小小的侦探游戏,变量就是我们的线索。
在 C# 中比较两个 DataTable 列值:实用指南
让我们了解如何比较两个不同数据表中的列值。
bool areEquals = dataTable1.AsEnumerable()
.SequenceEqual(dataTable2.AsEnumerable(), DataRowComparer.Default);
啊,找到拼图中缺失的那一块是多么令人高兴啊!
选择和排序操作
选择或排序数据的能力就像一个强大的魔法咒语,每个 C# 程序员都必须学习!
C# 从数据表中选择
选择操作类似于 SQL SELECT 查询。
DataRow[] selectedRows = table.Select("OrderAmount > 100");
哇哦!我们找到了订单金额大于 100 的行。
排序数据表
处理大量数据时,排序非常重要。就像把你的东西按顺序排列一样。
table.DefaultView.Sort = "OrderAmount DESC";
table = table.DefaultView.ToTable();
就像魔术一样,我们所有的数据都按订单金额的降序排列!
过滤和列表转换
闲聊够了,让我们深入讨论正事——过滤数据并将 DataTable 转换为列表!
过滤数据表
处理海量数据集时,过滤至关重要。这就像用一张好网捕鱼一样。
DataRow[] result = table.Select("OrderAmount > 100 AND OrderAmount < 200");
我们刚刚捕获了订单金额在 100 到 200 之间的所有行!
列表数据表
列出 DataTable 使我们能够有效地处理和操作数据。
List<DataRow> list = table.AsEnumerable().ToList();
这就像将您的记录整齐地堆放在不同的抽屉里一样。
将数据表转换为列表
将 DataTable 转换为 List 为我们提供了更多操作数据的方法和功能。
var list = table.AsEnumerable().Select(row => new Customer {
CustomerId = row.Field<int>("CustomerID"),
CustomerName = row.Field<string>("CustomerName")
}).ToList();
我们的数据表现在是客户列表。
从 C# 列表创建数据表
从列表创建数据表就像逆向工程!
DataTable newDt = new DataTable();
newDt.Columns.AddRange(new DataColumn[2] {
new DataColumn("CustomerId", typeof(int)),
new DataColumn("Name", typeof(string))});
foreach (var item in list)
{
var row = newDt.NewRow();
row["CustomerId"] = item.CustomerId;
row["Name"] = item.Name;
newDt.Rows.Add(row);
}
惊喜!我们把客户列表重新转换成了 DataTable!
将 DataTable 导出为不同格式
让我们了解如何将 DataTable 导出为各种格式。想象一下你是一位魔术师,而你的 DataTable 就是你的魔术帽!
数据表到 CSV 的转换
将 DataTable 转换为 CSV 文件就像将您的想法翻译成另一种语言。
StringBuilder sb = new StringBuilder();
string[] columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName).ToArray();
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt.Rows)
{
string[] fields = row.ItemArray.Select(field => field.ToString()).ToArray();
sb.AppendLine(string.Join(",", fields));
}
File.WriteAllText("path_to_your_csv_file.csv", sb.ToString());
您的数据现在可以用 CSV 格式表示!
如何将 C# 数据表导出到 Excel
使用 EPPlus 或 NPOI 等库可以轻松地将 DataTable 导出到 Excel。
using (var excelFile = new ExcelPackage())
{
var worksheet = excelFile.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].LoadFromDataTable(table, true);
excelFile.SaveAs(new FileInfo("path_to_excel_file.xlsx"));
}
太神奇了,我们的 DataTable 现在在 Excel 中了!
C# 数据表转 PDF
DataTable 到 PDF 的转换需要第三方库,如 iTextSharp 或 SelectPdf。
Document document = new Document();
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("data.pdf", FileMode.Create));
document.Open();
PdfPTable pdfTable = new PdfPTable(dt.Columns.Count);
for (int i = 0; i < dt.Columns.Count; i++) {
pdfTable.AddCell(new Phrase(dt.Columns[i].ColumnName));
}
for (int i = 0; i < dt.Rows.Count; i++) {
for (int j = 0; j < dt.Columns.Count; j++) {
pdfTable.AddCell(new Phrase(dt.Rows[i][j].ToString()));
}
}
document.Add(pdfTable);
document.Close();
阿布拉卡达布拉!我们的 DataTable 现在是 PDF 格式了!
DataReader 到 DataTable 的转换
当我们需要使用 DataTables 操作对象数据时,将数据读取器转换为 DataTable 非常方便。
C#:以最少的努力从 DataReader 到 DataTable
DataReader 提供了一个只进游标,用于从 SQL Server 数据库读取行,DataTable 使数据操作更容易。
SqlDataReader reader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
轰!我们刚刚把 DataReader 变成了 DataTable!
使用 AsEnumerable 和 Select 与 DataTable
DataTable 的 AsEnumerable 扩展方法提供了一种使用 LINQ 查询数据的强大方法,类似于查询实体集合。
数据表可枚举选择
让我们了解一下 AsEnumerable 和 Select 是如何结合在一起的。
var result = from row in table.AsEnumerable()
where row.Field<int>("CustomerID") == 1
select row;
别再胡闹了,对吧?我们刚刚选中了 CustomerID 等于 1 的所有行!
简而言之,DataTable 允许您以表格形式组织和操作数据,包括创建 DataTable、添加行、获取列值、排序、选择,甚至导出为 CSV、Excel 或 PDF 等各种格式。希望这篇 C# DataTable 详尽指南能够提升您的 C# 技能。别忘了,熟能生巧。祝您编程愉快!
鏂囩珷鏉ユ簮锛�https://dev.to/bytehide/datatable-in-c-usage-and-examples-40f2