c# - 比较两个数据表并获得差异
问题描述
我有两个数据表,我想根据不同的列获取这两个数据库之间的差异,并将它们复制到另一个数据表。
例如
数据表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();
解决方案
您可以使用 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)
推荐阅读
- while-loop - 在调试中工作但不发布的循环
- c# - 如何按顺序运行 AWS lambda 函数
- angular - Angular 7 PWA 网络存储选择
- libxlsxwriter - 使用 Libxlsxwriter 在 Excel 中读取单元格值?
- php - Php:在文件中动态替换文件名和变量
- azure-cosmosdb - 当我们没有获得相应函数的指标时,如何记录 Cosmos DB CountAsync 和 MaxAsync 操作的 RequestCharge?
- html - 我可以从 fields_for 为 div 设置一个 id 吗?
- jquery - 输入中只允许数字和“.”(点)
- angular - Angular Reactive Forms,将数据对象与 FormArray 的每个对象绑定的方法
- c# - 如何打开 Thumbscache.db