我有2个DataTables。 1表示我的表中来自SqlServer的当前行,1表示我想要添加的新行。
我想做类似的事情:
datatable1.Merge(datatable2);
我试图弄清楚,如果这两个表之间存在重复,是否会将副本添加到datatable1,还是会更新datatable1中的值?
我需要在datatable1中简单地更新重复项,并将非重复项添加到datatable1中。
我搜索了MSDN,但我找不到明确的答案。
答案 0 :(得分:0)
将新的源DataTable合并到目标中时,DataRowState值为Unchanged,Modified或Deleted的任何源行都与具有相同主键值的目标行匹配。 DataRowState值为Added的源行与具有与新源行相同的主键值的新目标行匹配。
它将更新具有相同主键的任何行。主键由DataTable.PrimaryKey
属性
答案 1 :(得分:0)
Merge
documentation包含以下段落的备注部分
执行合并时,默认情况下,合并前对现有数据所做的更改保留。开发人员可以通过调用此方法的其他两个重载之一来修改此行为,并为 preserveChanges 参数指定false值。
但是,reference source显示
public void Merge(DataTable table)
{
Merge(table, false, MissingSchemaAction.Add);
}
即。它实际上用preserveChanges=false
调用另一个重载。
看起来你应该得到理想的行为。但是,如果您想要绝对确定,请明确调用另一个overload并像这样传递preserveChanges=false
datatable1.Merge(datatable2, false);