首页 > 解决方案 > 比较两个数据表并获得差异

问题描述

我有两个数据表,我想根据不同的列获取这两个数据库之间的差异,并将它们复制到另一个数据表。

例如

数据表1

代码 姓名 年龄
123 用户 1 25 68000.00
456 用户 2 32 23000.00
963 用户 3 56 75000.00
852 用户4 29 13000.00

数据表 2

代码 姓名 年龄
963 用户 3 56 75000.00
456 用户 2 32 26000.58
123 用户 1 25 59000.63
852 用户4 29 13000.00
741 用户N 22 15000.56

数据表结果

代码 姓名 年龄
456 用户 2 32 26000.58
123 用户 1 25 59000.63
741 用户N 22 15000.56

我使用此代码,但它没有显示正确的结果

dtr = (from r in dt1.AsEnumerable()
                   where !dt2.AsEnumerable().Any(r2 => r[3].ToString().Trim() == r2[3].ToString().Trim())
                   select r).CopyToDataTable();

标签: c#datatablecompare

解决方案


您可以使用 Linq 并Except确定:

两个集合的集合差异定义为第一个集合的成员没有出现在第二个集合中。

在示例中,我将行投影到匿名类型,然后执行“除外”设置操作以获得结果:

var dtrows = dt1.AsEnumerable().Select(rw => new { Code = rw[0], Name = rw[1], Age = rw[2], Money = rw[3] });
var dt2rows = dt2.AsEnumerable().Select(rw => new { Code = rw[0], Name = rw[1], Age = rw[2], Money = rw[3] });

dt2rows.Except(dtrows)

推荐阅读