我有2个DataTable,我想创建第三个DataTable,它包含DataTable 1和DataTable 2之间的差异。
例如,DataTable1具有原始数据,而DataTable 2只是一个副本,就像复制一样。但是当你在DataTable1中插入一个新行时,DataTable2只是插入了同一行。现在我的代码在DataTable1和DataTable2之间进行比较,如果不是等于(插入1行或更多行),DataTable2再次记录来自DataTable1的所有数据。
如何执行选择命令,执行此差异并将这些数据记录在第三个DataTable中?
答案 0 :(得分:1)
尝试这样的事情:
table1.Merge(table2);
DataTable changesTable = table1.GetChanges();
答案 1 :(得分:0)
只使用SQL,您可以使用UNION
轻松找到差异,这里有一篇关于此主题的优秀文章:http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx
当表匹配时,查询将返回空行集,否则返回不同的行。
答案 2 :(得分:0)
我会考虑有两列来识别表(col1,col2)
var rowsOnlyInDt1 = dt1.AsEnumerable().Where(r => !dt2.AsEnumerable()
.Any(r2 => r["col1"].Trim().ToLower() == r2["col1"].Trim().ToLower() && r["col2"].Trim().ToLower() == r2["col2"].Trim().ToLower()));
DataTable result = rowsOnlyInDt1.CopyToDataTable();//The third table