你的位置:首页 > ASP.net教程

[ASP.net教程]DataTable去除重复行,根据某一字段进行distinct


网上有很多方法,比如利用视图处理:

 //去掉重复行 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过滤重复,但还要保留其他字段,这种方法是不行的


新方法:

DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Columns.Add("pro");

dt.Rows.Add(new object[] { "1", "1", "11" });
dt.Rows.Add(new object[] { "1", "2", "111" });
dt.Rows.Add(new object[] { "1", "3", "1111" });
dt.Rows.Add(new object[] { "1", "4", "11111" });
dt.Rows.Add(new object[] { "2", "1", "111111" });
dt.Rows.Add(new object[] { "2", "2", "1111111" });

DataRow[] drs = dt.Copy().Select("", "id");
//用于存储所有规格(不重复)
object value = null;
DataTable d = dt.Clone();
for (int i = 0; i < drs.Length; i++)
{
if (value == null || !value.Equals(drs[i]["id"].ToString()))
{
d.ImportRow(drs[i]);
value = drs[i]["id"].ToString();
continue;
}
drs[i].Delete();
}

 

最终的d :就是根据id过滤重复后的结果。