【问题标题】:Compare two similar but not identical data tables比较两个相似但不相同的数据表
【发布时间】:2011-07-18 09:58:26
【问题描述】:

我有两个数据表,它们有一个共同的主键列,但其他结构不同,因为它们是从不同的表创建的。我想检查与 A 相比,数据表 B 中缺少哪些行,目的是将缺少的行添加到数据库中。

我看过像this one 这样的问题,这些问题提供了很好的答案,但通常假设数据表是相同的。

既然我想获得一个新行列表以进行插入,有没有什么方法可以在不遍历行和检查 PK 的情况下做到这一点?如果我没记错的话,Merge 会保留旧行,我不想重新提交到数据库。

两个表都只有几十行,最多几百行。无论如何,逐行进行计算所带来的影响可以忽略不计吗?

编辑:这两个源表位于不同的数据库/服务器上,所以我不能轻易做到 SQL中的比较。无论如何,我更希望消费应用程序执行此操作,因为我可能会在完成之前添加更多行处理。

【问题讨论】:

  • 我只能回答并建议迭代。当一条记录的列值可能在第一个数据表中不存在时,我想不出一个函数只会将 n 行从另一个数据表添加到数据表中。

标签: c# datatable comparison


【解决方案1】:

我希望我正确理解了您的需求,但是使用 Linq 怎么样?将 2 个表的键加载到 2 个 IEnumerable<keytype> 对象中,例如(假设您的密钥类型为int

IEnumerable<int> keys1, keys2;
// code to load the keys into these collections
// to find the keys in keys1 that are missing from keys2:
var missingKeys = keys1.Where(k1 => !keys2.Any(k2 => k2 == k1)); 

HTH

【讨论】:

  • 谢谢 - 我自己真的应该想到这一点,我对大多数表结构不同的事实感到困惑! :)
【解决方案2】:

在 SQL 中这样做不是更容易/更快吗,例如:

SELECT col1 FROM table1
MINUS
SELECT col1 FROM table2

【讨论】:

  • 是的,但是这两个表实际上在不同的数据库上,并且可能在不同的服务器上:)
猜你喜欢
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
相关资源
最近更新 更多