C# - DataTable.Merge() 是否添加重复项或更新项

本文关键字:更新 添加 是否 DataTable Merge | 更新日期: 2023-09-27 18:30:32

我有 2 个数据表。 1 个包含 SqlServer 表中的当前行,1 个包含我要添加的新行。

我想做这样的事情:

datatable1.Merge(datatable2);

我试图弄清楚,如果这两个表之间存在重复项,会将重复项添加到 datatable1 中,还是会更新 datatable1 中的值?

我需要简单地在数据表1中更新重复项,并将非重复项添加到数据表1中。

Iv搜索了MSDN,我真的找不到一个明确的答案。

C# - DataTable.Merge() 是否添加重复项或更新项

来自合并文档的最后一段

将新的源 DataTable 合并到目标中时,DataRowState 值为"未更改"、"已修改"或"已删除"的任何源行都将与具有相同主键值的目标行匹配。DataRowState 值为"已添加"的源行与具有与新源行相同的主键值的新目标行匹配。

它将更新具有相同主键的任何行。主键由 DataTable.PrimaryKey 属性设置

"

备注"部分(如果Merge文档包含以下段落)

执行合并时,默认情况下

,在合并操作期间将保留在合并之前对现有数据所做的更改。开发人员可以通过调用此方法的其他两个重载之一并为 preserveChanges 参数指定 false 值来修改此行为。

但是,参考源显示

public void Merge(DataTable table)
{
    Merge(table, false, MissingSchemaAction.Add);
}

即它实际上用preserveChanges=false调用另一个重载。

所以看起来你应该得到想要的行为。但是,如果您想绝对确定,只需显式调用其他重载并像这样传递preserveChanges=false

datatable1.Merge(datatable2, false);