美好的一天。
我看到的最近的帖子是this post。
我有一个数据表,其中包含以下信息:
ID COL1 COL2 COL3
10 ABC Town Dog
20 AAA Town Dog
30 BBB Town Cat
40 CCC City Cat
50 DDD City Pig
我想清除具有相似值的列,以便只保留每个列的第一个实例。要过滤的列是用户输入的,它可以生成:
ID COL1 COL2 COL3 ID COL1 COL2 COL3
10 ABC Town Dog 10 ABC Town Dog
20 AAA Dog 20 AAA Town
30 BBB Cat OR 30 BBB Town Cat
40 CCC City Cat 40 CCC City
50 DDD Pig 50 DDD City Pig
到目前为止,我有一个工作代码,但执行速度很慢。
foreach (string strListVal in lstUniqueString) //contains the unique values
{
foreach (DataRow drTableTraverse in dt.Rows) //match the string vs. all rows
{
if (drTableTraverse[strColumnName].ToString() == strListVal && bClearedFirst == false)
{
bClearedFirst = true; //flag for the first instance
continue; //skip the first instance, then clear the remaining
}
else if (drTableTraverse[strColName].ToString() == strListVal)
{
drTableTraverse[strColumnName] = "";
}
}
}
有更快的方法来达到相同的效果吗?不使用linq,如果有的话。
答案 0 :(得分:0)
这似乎是一个更优化的解决方案
foreach (string strListVal in lstUniqueString)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i][strAttribute].ToString().Equals(strListVal) && bClearedFirst == false)
{
bClearedFirst = true;
continue; //should skip first instance
}
else if (dt.Rows[i][strAttribute].ToString().Equals(strListVal) && bClearedFirst == true)
{
dt.Rows[i][strAttribute] = DBNull.Value;
}
}
bClearedFirst = false; //reset
}