c# - 如何获得两个数据表之间的差异

标签 c# linq datatable

我有这两个数据表,我想找出它们之间的区别。这是一个例子:

Table1
-------------------------
ID  |   Name 
--------------------------
 1  |  A
 2  |  B
 3  |  C
--------------------------

Table2
-------------------------
ID  |   Name 
--------------------------
 1  |  A
 2  |  B
--------------------------

我只想将结果作为表 1 中的数据而不是表 2 中的数据 (table1-table2)

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);

那么,错在哪里呢?非常感谢您的所有回答。 :)

最佳答案

你可以试试下面的代码...

table1.AsEnumerable().Where(
    r =>!table2.AsEnumerable().Select(x=>x["ID"]).ToList().Contains(r["ID"])).ToList();

关于c# - 如何获得两个数据表之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15002623/

相关文章:

c# - 将JSON反序列化为c#类

c# - 检查参数是否是具有流畅验证的 3 个值之一

c# - 如何在 C# 中将数据从 Sqlserver 2008 数据库表插入 MS Access

c# - Silverlight:空数据网格

c# - 我有 5 个法规,我需要确保 3 个法规被 3 个不同的人占用

c# - 无法将 Select() 的结果转换为 List<T>

JavaScript 会阻止或减慢浏览器的速度。如何防止警报或加速脚本

javascript - 为数据表中的行添加 id

c# - c#中子命名空间的封装

codeigniter - 数据表不工作 - Ignited 数据表库