DataTable.Merge()方法可以实现两张表的数据合并。
table1.Merge(table2)表示将table2中的数据合并到table1中,如:
构建dt1:
DataTable dt1 = new DataTable();
dt1.Columns.Add("Name", typeof(string));
dt1.Columns.Add("ID",typeof(string));
DataRow row1 = dt1.NewRow();
row1["Name"] = "Francis";
row1["ID"] = "10001";
dt1.Rows.Add(row1);
构建dt2
DataTable dt2 = new DataTable();
dt2.Columns.Add("One", typeof(string));
dt2.Columns.Add("Two", typeof(string));
dt2.Columns.Add("Three", typeof(string));
dt2.Columns.Add("Four", typeof(string));
DataRow row2 = dt2.NewRow();
row2[0] = "一";
row2[1] = "二";
row2[2] = "三";
row2[3] = "四";
dt2.Rows.Add(row2);
执行dt1.Merge(dt2)后得到结果。
执行后dt1会保存合并后的数据。如果此时再执行dt2.Merge(dt1)的话,会得到如下数据:
可见,与表相同的列会合并显示。所示,dt1的数据被移到了右边。
若合并的表具有相同的主键,则合并后主键相同并且列相同的数据会被合并。考虑MSDN中的例子:
private static void DemonstrateMergeTable()
{
// Demonstrate merging, within and without
// preserving changes.
// In this example, take these actions:
// 1. Create a DataTable (table1) and fill the table with data.
// 2. Create a copy of table1, and modify its data (modifiedTable).
// 3. Modify data in table1.
// 4. Make a copy of table1 (table1Copy).
// 5. Merge the data from modifiedTable into table1 and table1Copy,
// showing the difference between setting the preserveChanges
// parameter to true and false.
// Create a new DataTable.
DataTable table1 = new DataTable("Items");
// Add two columns to the table:
DataColumn column = new DataColumn("id", typeof(System.Int32));
column.AutoIncrement = true;
table1.Columns.Add(column);
column = new DataColumn("item", typeof(System.String));
table1.Columns.Add(column);
// Set primary key column.
table1.PrimaryKey = new DataColumn[] { table1.Columns[0] };
// Add some rows.
DataRow row;
for (int i = 0; i <= 3; i++)
{
row = table1.NewRow();
row["item"] = "Item " + i;
table1.Rows.Add(row);
}
// Accept changes.
table1.AcceptChanges();
PrintValues(table1, "Original values");
DataTable dt2 = table1.Copy();
PrintValues(dt2, "Copy form Table1");
dt2.Merge(table1,true);
PrintValues(dt2, "dt2 merge table1");
// Using the same schema as the original table,
// modify the data for later merge.
DataTable modifiedTable = table1.Copy();
foreach (DataRow rowModified in modifiedTable.Rows)
{
rowModified["item"] = rowModified["item"].ToString()
+ " modified";
}
modifiedTable.AcceptChanges();
// Change row values, and add a new row:
table1.Rows[0]["item"] = "new Item 0";
table1.Rows[1]["item"] = "new Item 1";
row = table1.NewRow();
row["id"] = 4;
row["item"] = "Item 4";
table1.Rows.Add(row);
// table1.AcceptChanges();
// Get a copy of the modified data:
DataTable table1Copy = table1.Copy();
PrintValues(table1, "Modified and new Values");
PrintValues(modifiedTable, "Data to be merged into table1");
// Merge new data into the modified data.
table1.Merge(modifiedTable, true);
PrintValues(table1, "Merged data (preserve changes)");
table1Copy.Merge(modifiedTable, false);
PrintValues(table1Copy, "Merged data (don't preserve changes)");
}
DataTable.Merge()方法可以实现两张表的数据合并。
table1.Merge(table2)表示将table2中的数据合并到table1中,如:
构建dt1:
DataTable dt1 = new DataTable();
dt1.Columns.Add("Name", typeof(string));
dt1.Columns.Add("ID",typeof(string));
DataRow row1 = dt1.NewRow();
row1["Name"] = "Francis";
row1["ID"] = "10001";
dt1.Rows.Add(row1);
构建dt2
DataTable dt2 = new DataTable();
dt2.Columns.Add("One", typeof(string));
dt2.Columns.Add("Two", typeof(string));
dt2.Columns.Add("Three", typeof(string));
dt2.Columns.Add("Four", typeof(string));
DataRow row2 = dt2.NewRow();
row2[0] = "一";
row2[1] = "二";
row2[2] = "三";
row2[3] = "四";
dt2.Rows.Add(row2);
执行dt1.Merge(dt2)后得到结果。
执行后dt1会保存合并后的数据。如果此时再执行dt2.Merge(dt1)的话,会得到如下数据:
可见,与表相同的列会合并显示。所示,dt1的数据被移到了右边。
若合并的表具有相同的主键,则合并后主键相同并且列相同的数据会被合并。考虑MSDN中的例子:
private static void DemonstrateMergeTable()
{
// Demonstrate merging, within and without
// preserving changes.
// In this example, take these actions:
// 1. Create a DataTable (table1) and fill the table with data.
// 2. Create a copy of table1, and modify its data (modifiedTable).
// 3. Modify data in table1.
// 4. Make a copy of table1 (table1Copy).
// 5. Merge the data from modifiedTable into table1 and table1Copy,
// showing the difference between setting the preserveChanges
// parameter to true and false.
// Create a new DataTable.
DataTable table1 = new DataTable("Items");
// Add two columns to the table:
DataColumn column = new DataColumn("id", typeof(System.Int32));
column.AutoIncrement = true;
table1.Columns.Add(column);
column = new DataColumn("item", typeof(System.String));
table1.Columns.Add(column);
// Set primary key column.
table1.PrimaryKey = new DataColumn[] { table1.Columns[0] };
// Add some rows.
DataRow row;
for (int i = 0; i <= 3; i++)
{
row = table1.NewRow();
row["item"] = "Item " + i;
table1.Rows.Add(row);
}
// Accept changes.
table1.AcceptChanges();
PrintValues(table1, "Original values");
DataTable dt2 = table1.Copy();
PrintValues(dt2, "Copy form Table1");
dt2.Merge(table1,true);
PrintValues(dt2, "dt2 merge table1");
// Using the same schema as the original table,
// modify the data for later merge.
DataTable modifiedTable = table1.Copy();
foreach (DataRow rowModified in modifiedTable.Rows)
{
rowModified["item"] = rowModified["item"].ToString()
+ " modified";
}
modifiedTable.AcceptChanges();
// Change row values, and add a new row:
table1.Rows[0]["item"] = "new Item 0";
table1.Rows[1]["item"] = "new Item 1";
row = table1.NewRow();
row["id"] = 4;
row["item"] = "Item 4";
table1.Rows.Add(row);
// table1.AcceptChanges();
// Get a copy of the modified data:
DataTable table1Copy = table1.Copy();
PrintValues(table1, "Modified and new Values");
PrintValues(modifiedTable, "Data to be merged into table1");
// Merge new data into the modified data.
table1.Merge(modifiedTable, true);
PrintValues(table1, "Merged data (preserve changes)");
table1Copy.Merge(modifiedTable, false);
PrintValues(table1Copy, "Merged data (don't preserve changes)");
}