【发布时间】:2014-07-03 07:58:23
【问题描述】:
有一个稍微棘手的问题。我有一个包含数千行或行的数据表。它有两列。使用其中一列作为我需要检查重复项的键。如果有,我需要将另一列中的值添加到一列中并删除重复的行。我能够找到重复项并添加值。但是当我删除一行时,由于索引已更改,它会影响其余行。另外,我不确定我是否做得有效率。请指教。
Cate_Id TrxnCount
---------- ----------
ER01 0
ER02 0
ER41 0
ER53 1
ER53 2
ER56 0
ER56 0
ER56 0
ER57 8
ER57 9
删除和添加值后
Cate_Id TrxnCount
---------- ----------
ER01 0
ER02 0
ER41 0
ER53 3
ER56 0
ER57 17
我怎样才能以简单有效的方式实现这一目标。请指教。
这是我所做的:
List<DataRow> rowsToDelete = new List<DataRow>();
int newValue = 0;
for (int i = 15; i < dt.Rows.Count; i++)
{
if (i > 0)
{
// Compare with previous row using index
if (dt.Rows[i]["Cate_Id "].ToString() == dt.Rows[i - 1]["Cate_Id "].ToString())
{
newValue = Convert.ToInt32(dt.Rows[i]["TrxnCount"].ToString()) + Convert.ToInt32(dt.Rows[i - 1]["TrxnCount"].ToString());
dt.Rows[i]["TrxnCount"] = newValue;
rowsToDelete.Add(dt.Rows[i - 1]);
newValue = 0;
}
}
if (i < dt.Rows.Count - 1)
{
if (dt.Rows[i]["Cate_Id"].ToString() == dt.Rows[i + 1]["Cate_Id"].ToString())
{
newValue = Convert.ToInt32(dt.Rows[i]["TrxnCount"].ToString()) + Convert.ToInt32(dt.Rows[i - 1]["TrxnCount"].ToString());
dt.Rows[i]["TrxnCount"] = newValue;
rowsToDelete.Add(dt.Rows[i - 1]);
newValue = 0;
}
}
}
foreach(var r inrowsToDelete )
dt.Rows.Remove(r);
【问题讨论】:
-
我已经在数据库端提供了一种方法。如果这不是您所需要的,请让我知道更多关于您使用它的详细信息,以便为您提供替代解决方案。