Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个数据表之间的差异_C#_Asp.net_Linq_Select_Datatable - Fatal编程技术网

C# 两个数据表之间的差异

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命令来实现

我有2个DataTable,我想创建第三个DataTable,它包含DataTable 1和DataTable 2之间的差异

例如,DataTable1具有原始数据,而DataTable2只是一个副本,就像复制一样。但是,当您在DataTable1中插入新行时,DataTable2只是插入了同一行。现在,我的代码在DataTable1和DataTable2之间进行比较,如果不等于(插入了1行或更多行),DataTable2将再次记录DataTable1中的所有数据


如何执行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