gpt4 book ai didi

c# - 当多列数据匹配时,如何合并DataTable中的行?

转载 作者:太空狗 更新时间:2023-10-30 00:51:42 26 4
gpt4 key购买 nike

我正在尝试找出一种在 column1、column2、column3、column4 匹配时合并 DataTable 中的行的好方法。有没有人知道如何在 VB.NET 和/或 C# 中完成此操作?

DataTable with duplicate rows to merge 
-------------------------------------------------------------
| Column1 | Column2 | Column3 | Column4 | Column5 | Column6 |
-------------------------------------------------------------
| 123456 | 6 | 54 | 5 | 0.00 | 36.78 |
| 123456 | 6 | 54 | 5 | 21.00 | 0.00 |
| 123456 | 6 | 54 | 8 | 0.00 | 102.09 |
| 123456 | 6 | 54 | 8 | 6.50 | 0.00 |


Final DataTable with merged rows
-------------------------------------------------------------
| Column1 | Column2 | Column3 | Column4 | Column5 | Column6 |
-------------------------------------------------------------
| 123456 | 6 | 54 | 5 | 21.00 | 36.78 |
| 123456 | 6 | 54 | 8 | 6.50 | 102.09 |

最佳答案

这是一个非 LINQ 替代方案。它所做的是迭代第一个表中的每一行。然后检查辅助表以查看其中是否有任何行符合条件。如果有,它会添加其他列中的值。如果没有,它将整行添加到新表中。

// Clone() only clones the table structure. It does not also clone the data.
DataTable dtFinal = dtOriginal.Clone();
for (int i = 0; i < dtOriginal.Rows.Count; i++)
{
bool isDupe = false;
for (int j = 0; j < dtFinal.Rows.Count; j++)
{
if (dtOriginal.Rows[i][0].ToString() == dtFinal.Rows[j][0].ToString()
&& dtOriginal.Rows[i][1].ToString() == dtFinal.Rows[j][1].ToString()
&& dtOriginal.Rows[i][2].ToString() == dtFinal.Rows[j][2].ToString())
{
dtFinal.Rows[j][3] = int.Parse(dtFinal.Rows[j][3].ToString()) + int.Parse(dtOriginal.Rows[i][3].ToString());
isDupe = true;
break;
}
}

if (!isDupe)
{
dtFinal.ImportRow(dtOriginal.Rows[i]);
}
}

您可以对此进行扩展,以在匹配条件和添加逻辑中包含更多/更少的列。您可能还想出一些方法来摆脱列号硬编码,例如将它们迭代到特定索引或其他东西。这完全取决于您的要求。不过,这应该会给您一个不错的起点。

关于c# - 当多列数据匹配时,如何合并DataTable中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25434686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com