C# 两个数据表之间的差异
我有2个DataTable,我想创建第三个DataTable,它包含DataTable 1和DataTable 2之间的差异 例如,DataTable1具有原始数据,而DataTable2只是一个副本,就像复制一样。但是,当您在DataTable1中插入新行时,DataTable2只是插入了同一行。现在,我的代码在DataTable1和DataTable2之间进行比较,如果不等于(插入了1行或更多行),DataTable2将再次记录DataTable1中的所有数据C# 两个数据表之间的差异,c#,asp.net,linq,select,datatable,C#,Asp.net,Linq,Select,Datatable,我有2个DataTable,我想创建第三个DataTable,它包含DataTable 1和DataTable 2之间的差异 例如,DataTable1具有原始数据,而DataTable2只是一个副本,就像复制一样。但是,当您在DataTable1中插入新行时,DataTable2只是插入了同一行。现在,我的代码在DataTable1和DataTable2之间进行比较,如果不等于(插入了1行或更多行),DataTable2将再次记录DataTable1中的所有数据 如何执行select命令来实现
如何执行select命令来实现这一差异并将这些数据记录到第三个数据表中?尝试以下操作:
table1.Merge(table2);
DataTable changesTable = table1.GetChanges();
仅使用SQL您可以使用
UNION
轻松查找差异,这里有一篇关于此主题的优秀文章:
当表匹配时,查询将返回一个空行集,否则将返回不同的行 > P>我会考虑有两个列来标识表<代码>(COL1,COL2)< /代码>
无法使用代码对
DataTable
s执行大量查询。例如,您不能简单地编写SELECT*fromtable代码>。但是,您可以使用LINQ编写伪查询。那么,如何使用LINQ比较2个数据表呢?这一个可以帮助您。第三个DataTable,使用GetChanges方法返回Null。不,我认为合并后,changesTable将填充Table1的所有记录。重复项将被丢弃,只有Table1
和table2
之间的差异将填充到changesTable
@JamesJohnson中,我已经测试过它,但是它使用表1中的所有记录填充changesTable
。我认为linq是解决这个问题的唯一解决方案。这没有意义。如果有的话,它应该用表2中的记录填充changesTable。
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