删除DataTable重复列,只删除其中的一列重复行的解决方法
删除DataTable重复列,只删除其中的一列重复行的解决方法
发布时间:2016-12-29 来源:查字典编辑
摘要:vs2005针对datatable已经有封装好的去重复方法:复制代码代码如下://去掉重复行DataViewdv=table.Default...

vs2005针对datatable已经有封装好的去重复方法:

复制代码 代码如下:

//去掉重复行

DataView dv = table.DefaultView;

table = dv.ToTable(true, new string[] { "name", "code" });

此时table 就只有name、code无重复的两行了,如果还需要id值则

table = dv.ToTable(true, new string[] { "id","name", "code" });//第一个参数true 启用去重复,类似distinct

如果有一组数据(id不是唯一字段)

复制代码 代码如下:

id name code

张三 123

李四 456

张三 456

张三 123

通过上面的方法得到

复制代码 代码如下:

id name code

张三 123

李四 456

张三 456

去重复去掉的仅仅是 id name code完全重复的行,如果想要筛选的数据仅仅是name不允许重复呢?

复制代码 代码如下:

table = dv.ToTable(true, new string[] { "name"});

得到:

复制代码 代码如下:

name

张三

李四

但是我想要的结果是只针对其中的一列name列 去重复,还要显示其他的列

需要的结果是:

复制代码 代码如下:

id name code

1 张三 123

2 李四 456

这个该怎么实现?下面的方法就可以,也许有更好的方法,希望大家多多指教

复制代码 代码如下:

#region 删除DataTable重复列,类似distinct

/// <summary>

/// 删除DataTable重复列,类似distinct

/// </summary>

/// <param name="dt">DataTable</param>

/// <param name="Field">字段名</param>

/// <returns></returns>

public static DataTable DeleteSameRow(DataTable dt, string Field)

{

ArrayList indexList = new ArrayList();

// 找出待删除的行索引

for (int i = 0; i < dt.Rows.Count - 1; i++)

{

if (!IsContain(indexList, i))

{

for (int j = i + 1; j < dt.Rows.Count; j++)

{

if (dt.Rows[i][Field].ToString() == dt.Rows[j][Field].ToString())

{

indexList.Add(j);

}

}

}

}

// 根据待删除索引列表删除行

for (int i = indexList.Count - 1; i >= 0; i--)

{

int index = Convert.ToInt32(indexList[i]);

dt.Rows.RemoveAt(index);

}

return dt;

}

/// <summary>

/// 判断数组中是否存在

/// </summary>

/// <param name="indexList">数组</param>

/// <param name="index">索引</param>

/// <returns></returns>

public static bool IsContain(ArrayList indexList, int index)

{

for (int i = 0; i < indexList.Count; i++)

{

int tempIndex = Convert.ToInt32(indexList[i]);

if (tempIndex == index)

{

return true;

}

}

return false;

}

#endregion

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新asp.net教程学习
热门asp.net教程学习
编程开发子分类