C# - DataTable.Merge() 是否添加重复项或更新项
本文关键字:更新 添加 是否 DataTable Merge | 更新日期: 2023-09-27 18:30:32
我有 2 个数据表。 1 个包含 SqlServer 表中的当前行,1 个包含我要添加的新行。
我想做这样的事情:
datatable1.Merge(datatable2);
我试图弄清楚,如果这两个表之间存在重复项,会将重复项添加到 datatable1 中,还是会更新 datatable1 中的值?
我需要简单地在数据表1中更新重复项,并将非重复项添加到数据表1中。
Iv搜索了MSDN,我真的找不到一个明确的答案。
来自合并文档的最后一段
将新的源 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);