如何正确合并多个DataTable?解决合并时数据下移问题
如何横向合并两个DataTable的对应行?
你当前使用DataTable.Merge()方法会将第二个表的数据作为新行追加,但这不是横向合并的正确方式。Merge方法的设计目的是合并结构相近的数据集(比如同步更新、处理重复记录),无法直接实现对应行的横向拼接。
要实现对应行横向合并,可以按以下步骤操作:
- 将第二个表的所有列添加到第一个表中
- 遍历每行数据,把第二个表对应行的列值填充到第一个表的新列里
修改后的代码如下:
public DataTable MergeTables() { var dataTable1 = new DataTable(); dataTable1.Columns.Add("Id"); dataTable1.Columns.Add("Name"); dataTable1.Columns.Add("Surname"); dataTable1.Rows.Add("1", "Mike", "Tyson"); dataTable1.Rows.Add("2", "John", "Wick"); var dataTable2 = new DataTable(); dataTable2.Columns.Add("Country"); dataTable2.Columns.Add("Age"); dataTable2.Rows.Add("America", "35"); dataTable2.Rows.Add("Brasil", "50"); // 第一步:将dataTable2的列添加到dataTable1 foreach (DataColumn col in dataTable2.Columns) { dataTable1.Columns.Add(col.ColumnName, col.DataType); } // 第二步:遍历行,填充对应数据 for (int i = 0; i < dataTable1.Rows.Count; i++) { if (i < dataTable2.Rows.Count) // 确保两个表行数一致,避免索引越界 { foreach (DataColumn col in dataTable2.Columns) { dataTable1.Rows[i][col.ColumnName] = dataTable2.Rows[i][col.ColumnName]; } } } return dataTable1; }
代码说明
- 先遍历
dataTable2的列,把这些列全部添加到dataTable1中,完成结构上的横向扩展 - 循环每一行,将
dataTable2对应行的列值赋值给dataTable1的新列 - 加入行数判断,避免当两个表行数不一致时出现索引越界问题
内容的提问来源于stack exchange,提问作者Murad
相关产品推荐
相关产品推荐

