我想将一个DataTable附加到另一个DataTable。我看到DataTable类有两个方法; “加载(IDataReader)”和“合并(DataTable)”。从文档中,如果存在行,两者似乎都会将传入数据与现有DataTable“合并”。我将在数据访问层中进行合并。
我可以使用IDataReader并使用Load方法合并DataTables。或者我可以使用IDataReader加载DataSet,从DataSet获取DataTable,然后使用Merge方法合并DataTable。
我想知道是否有人可以告诉我哪种方法可以使用?
或者,如果您对如何完成此任务有不同的建议,请与我们联系。
答案 0 :(得分:51)
相同列名中的数据类型必须为等号。
dataTable1.Merge(dataTable2);
之后结果是:
dataTable1 = dataTable1 + dataTable2
答案 1 :(得分:47)
Merge采用DataTable,Load需要IDataReader - 因此,根据您的数据层可以访问的内容,请使用所需的方法。我的理解是Load会在内部调用Merge,但不是100%肯定。
如果您有两个DataTable,请使用合并。
答案 2 :(得分:17)
您可以让DataAdapter
完成工作。 DataAdapter.Fill(DataTable)
会将您的新行追加到DataTable
中的任何现有行。
答案 3 :(得分:5)
添加两个包含数据表的数据集,现在它将根据需要合并
DataSet ds1 = new DataSet();
DataSet ds2 = new DataSet();
DataTable dt1 = new DataTable();
dt1.Columns.Add(new DataColumn("Column1", typeof(System.String)));
DataRow newSelRow1 = dt1.NewRow();
newSelRow1["Column1"] = "Select";
dt1.Rows.Add(newSelRow1);
DataTable dt2 = new DataTable();
dt2.Columns.Add(new DataColumn("Column1", typeof(System.String)));
DataRow newSelRow2 = dt1.NewRow();
newSelRow2["Column1"] = "DataRow1Data"; // Data
dt2.Rows.Add(newSelRow2);
ds1.Tables.Add(dt1);
ds2.Tables.Add(dt2);
ds1.Tables[0].Merge(ds2.Tables[0]);
现在ds1将拥有合并数据
答案 4 :(得分:1)
考虑一种可以整齐地处理任意多个表的解决方案。
//ASSUMPTION: All tables must have the same columns
var tables = new List<DataTable>();
tables.Add(oneTableToRuleThemAll);
tables.Add(oneTableToFindThem);
tables.Add(oneTableToBringThemAll);
tables.Add(andInTheDarknessBindThem);
//Or in the real world, you might be getting a collection of tables from some abstracted data source.
//behold, a table too great and terrible to imagine
var theOneTable = tables.SelectMany(dt => dt.AsEnumerable()).CopyToDataTable();
封装到一个帮助程序中以供将来重用:
public static DataTable CombineDataTables(params DataTable[] args)
{
return args.SelectMany(dt => dt.AsEnumerable()).CopyToDataTable();
}
只用代码声明了几个表吗?
var combined = CombineDataTables(dt1,dt2,dt3);
是否想合并到现有表之一而不是创建新表?
dt1 = CombineDataTables(dt1,dt2,dt3);
已经有一个表的集合,而不是一个一个地声明?
//Pretend variable tables already exists
var tables = new[] { dt1, dt2, dt3 };
var combined = CombineDataTables(tables);
答案 5 :(得分:-2)
使用循环
for (int i = 0; i < dt1.Rows.Count; i++)
{
dt2.Rows.Add(dt1.Rows[i][0], dt1.Rows[i][1], ...);//you have to insert all Columns...
}