我有这两个数据表,我想获得它们之间的区别。这里有一个例子:如何获得两个数据表之间的差异
Table1
-------------------------
ID | Name
--------------------------
1 | A
2 | B
3 | C
--------------------------
Table2
-------------------------
ID | Name
--------------------------
1 | A
2 | B
--------------------------
我只是想要的结果的数据是在表1,而不是在表2(表1,表2)
ResultTable
-------------------------
ID | Name
--------------------------
3 | C
--------------------------
我试图通过LINQ到使用这两个类似的解决方案,但它总是返回table1而不是table1-table2。这是第一个解决方案:
DataTable table1= ds.Tables["table1"];
DataTable table2= ds.Tables["table2"];
var diff= table1.AsEnumerable().Except(table2.AsEnumerable(),DataRowComparer.Default);
解决方法二:
var dtOne = table1.AsEnumerable();
var dtTwo = table2.AsEnumerable();
var difference = dtOne.Except(dtTwo);
那么,哪里是错?非常感谢您的答复。 :)
除了检查是否它们是相同的实例。他们各自的属性并不相同。您可以使用接受EqualityComparer的重载,或者您可以研究在各种LINQ +库中实现的扩展方法ExceptBy(),以及Jon Skeets MoreLinq(http://code.google.com/p/morelinq/) – Tormod 2013-02-21 12:52:35
@ Tormod,但在他的第一个解决方案中,DataRowComparer的用途是什么?它覆盖'公共bool Equals(TRow leftRow,TRow rightRow)'来比较实际的列值。 – hometoast 2013-02-21 13:05:50
你能展示你如何检索你的数据表?数据可能与预期的不同吗?我在LINQPad中做了一个快速示例,你的第一个解决方案似乎工作正常。 – goric 2013-02-21 13:13:07