C# 数据表合并不同的数据

C# 数据表合并不同的数据,c#,datatable,merge,C#,Datatable,Merge,我正试着把注意力集中在DataTable.Merge上,因为这似乎是我想要做的,就是把一个DT的差异合并到另一个DT中 这里有两个相同的数据表,一个主键,后跟一个合并操作。为监视他们而提供的事件 //first table var dt1 = new DataTable(); dt1.Columns.Add("Col1", typeof(string)); dt1.Columns.Add("Col2", typeof(string)); dt1.PrimaryKey = ne

我正试着把注意力集中在DataTable.Merge上,因为这似乎是我想要做的,就是把一个DT的差异合并到另一个DT中

这里有两个相同的数据表,一个主键,后跟一个合并操作。为监视他们而提供的事件

  //first table
  var dt1 = new DataTable();
  dt1.Columns.Add("Col1", typeof(string));
  dt1.Columns.Add("Col2", typeof(string));
  dt1.PrimaryKey = new[] { dt1.Columns["Col1"] };

  //second table.. identical to first
  var dt2 = new DataTable();
  dt2.Columns.Add("Col1", typeof(string));
  dt2.Columns.Add("Col2", typeof(string));
  dt2.PrimaryKey = new[] { dt2.Columns["Col1"] };

  //some data
  object[] o1 = { "1", "A" };
  object[] o2 = { "2", DBNull.Value };
  object[] o3 = { "3", "C" };
  object[] o3New = { "3", "C New" };

  //add data to first table
  dt1.Rows.Add(o1);
  dt1.Rows.Add(o2);
  dt1.Rows.Add(o3);

  //add data to second table - third row is different
  dt2.Rows.Add(o1);
  dt2.Rows.Add(o2);
  dt2.Rows.Add(o3New);

  //register an event on row change
  dt1.RowChanged += Row_Changed;

  //merge second table into first
  dt1.Merge(dt2);

  //check for changes to first table
  var dt3 = dt1.GetChanges(DataRowState.Modified);
  if (dt3 == null)
    Console.WriteLine("No changes to dt1");
  else {
    Console.WriteLine("Modified rows in dt1:" + dt3.Rows.Count);
  }

  //check for changes to second table for the heck of it
  var dt4 = dt2.GetChanges(DataRowState.Modified);
  if (dt4 == null)
    Console.WriteLine("No changes to dt2");
  else {
    Console.WriteLine("Modified rows in dt2:" + dt4.Rows.Count);
  }
为了进行上述操作,此事件将捕获更改:

private static void Row_Changed(object sender, DataRowChangeEventArgs e) {
  Console.WriteLine("Row changed {0}\t{1}\t{2}", e.Action, e.Row.ItemArray[0], e.Row.ItemArray[1]);
}
输出显示所有三行都通过事件处理程序进行了更改,但最后显示调用GetChanges时没有任何更改。如果我有我的方式,在这个设置中只有一行会改变。但同时,这三者都在“改变”——但没有一个改变

我显然做错了什么。比我聪明的人能解释为什么吗

或者,是否有其他方法可以在相同的模式主键数据表设置中仅合并不同的数据字段