【发布时间】:2014-03-26 15:42:30
【问题描述】:
所以,我有 2 个单独的数据表,它们看起来非常相似,但例如它们的行中的值可能不同。
编辑:
我可以通过创建一个可以用作主键的临时标识列来获得一个唯一的 ID,如果这样会更容易的话。所以将 ID 列视为主键。
表 A
ID | Name | Value1 | Value2 | Value3
-------------------------------------
1 | Bob | 50 | 150 | 35
2 | Bill | 55 | 47 | 98
3 | Pat | 10 | 15 | 45
4 | Cat | 70 | 150 | 35
表 B
ID | Name | Value1 | Value2 | Value3
-------------------------------------
1 | Bob | 30 | 34 | 67
2 | Bill | 55 | 47 | 98
3 | Pat | 100 | 15 | 45
4 | Cat | 70 | 100 | 20
输出应该是:
表 C
ID | Name | TableAValue1 | TableBValue1 | DiffValue1 ....Samething for Value2 .....samething for value3
------------------------------------------------------
1 | Bob | 50 | 30 | 20
2 | Bill | 55 | 55 | 0
3 | Pat | 10 | 100 | 90
4 | Cat | 70 | 70 | 0
我知道执行此操作的繁琐方法是使用 forloop 并循环遍历每一行,并将列行相互比较。但我不确定如何使用我想要的结果创建一个新的表 C。此外,我认为使用Linq 可能有一个更简单的解决方案,我不太熟悉,但如果它更快且代码行更少,我会对linq 的解决方案感兴趣。 我正在寻找解决此问题的最优化/最有效的方法。因为这些数据表的大小可以在 5,000 到 15,000+ 行之间,因此内存使用成为问题。
【问题讨论】:
-
LINQ 在内部使用循环,因为您的 ID 不是唯一的,您需要逐行比较。我不确定 LINQ 是否会提高性能。
-
如何匹配两个表之间的行?它们是按名称键入的吗?还是通过组合或 ID 和名称?或者我们可以假设每个表的行数相同,并且行的顺序在它们之间完全匹配?
-
@StriplingWarrior 是的,每个表将具有相同数量的行/列,并且两个表的列名也将相同。但是表之间的行中没有唯一的主键..
-
@StriplingWarrior 我已经编辑了我的帖子,请查看更新后的问题,忽略我之前的评论。
-
@PrakashChennupati:没关系。我会建议使用
.Zip()LINQ 函数将两者结合起来,这比在 ID 上进行连接要快一些。另一个问题:您的输出是否必须采用 DataTable 的形式?由于内存和性能是一个问题,您最好使用代表输出中列的对象列表,而不是 DataTable。但我不知道你以后打算如何使用这些数据。