...............................处理DataTable的一个问题.........................................

vsstudio05 2007-11-08 11:08:54
一个DataTable,内有重复数据,如何消除重复情况?
ID name
1 a
4 b
1 a
3 d
4 b
使得其变为
ID name
1 a
4 b
3 d
-----排除Sql语句消除重复处理,仅在DataTable里面操作.......

...全文
82 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangkun9999 2007-11-08
  • 打赏
  • 举报
回复
如果要name列也唯一的话,加上: ds2.Columns["name"].Unique=true;
wangkun9999 2007-11-08
  • 打赏
  • 举报
回复
搞定:


DataTable ds=new DataTable();
ds.Columns.Add(new DataColumn("ID",typeof(int)));
ds.Columns.Add(new DataColumn("name",typeof(string)));
//ds.Columns["ID"].Unique=true;
DataRow dr;
dr=ds.NewRow();
dr[0]=1;
dr[1]="a";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=1;
dr[1]="a";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=4;
dr[1]="b";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=1;
dr[1]="a";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=3;
dr[1]="d";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=4;
dr[1]="b";
ds.Rows.Add(dr);

DataTable ds2=new DataTable();
ds2.Columns.Add(new DataColumn("ID",typeof(int)));
ds2.Columns.Add(new DataColumn("name",typeof(string)));
ds2.Columns["ID"].Unique=true;
for (int i=0;i<ds.Rows.Count;i++)
{
try
{
dr=ds2.NewRow();
dr[0]=Convert.ToInt32(ds.Rows[i]["ID"].ToString());
dr[1]=ds.Rows[i]["name"].ToString();
ds2.Rows.Add(dr);
}
catch{}


}

Response.Write(ds2.Rows.Count);
shoushii 2007-11-08
  • 打赏
  • 举报
回复
select distinct * from tab
vsstudio05 2007-11-08
  • 打赏
  • 举报
回复
恩,谢谢wangkun9999 的热心回帖,结贴前顺便BS “yeness ”...............
jack43349489 2007-11-08
  • 打赏
  • 举报
回复
如果table 的结构象LZ例子那样简单,数量大的话可以
先排序再处理可能简单些!

wangkun9999 2007-11-08
  • 打赏
  • 举报
回复
上面少了个清除数据列的语句:
DataTable ds2=ds.Copy;
ds2.Rows.Clear();//清除所有列
wangkun9999 2007-11-08
  • 打赏
  • 举报
回复
哎,还是写成个通用的函数了,方便以后吗:



public DataTable GetData(DataTable ds)
{
DataTable ds2=ds.Copy;
System.Data.DataColumnCollection ColumnCollection = ds2.Columns;
System.Data.DataColumn[] ColumnPK = {ColumnCollection["ID"] ,ColumnCollection["name"]};//这里设置要剔除重复的列,也可以写在参数里面
ds2.PrimaryKey=ColumnPK;
for (int i=0;i<ds.Rows.Count;i++)
{
try
{
dr=ds2.NewRow();
dr[0]=Convert.ToInt32(ds.Rows[i]["ID"].ToString());
dr[1]=ds.Rows[i]["name"].ToString();
ds2.Rows.Add(dr);
}
catch{}

}

return ds2;
}


调用newds=GetData(ds);
wangkun9999 2007-11-08
  • 打赏
  • 举报
回复
vsstudio05
我的问题很确定: 一个DataTable,要求消除重复数据!
但是那个代码我看好像是把里面的数据手动添加进去的???如果有100W个数据量的话,难道都是这样添加??

=>>
我那个datatable是为了测试自己加上去的,如果lz有需要的话可以改成个通用的函数;

另外,如果数据量很大的话(100w),不要说datatable这种方式剔除重复有问题,datatable是存放在内存中的数据表,存储这么大的数据量也不合理,本身把这么大的数据晕读出来也会死机了;
我上面写的这个程序只适少量的数据.
wangkun9999 2007-11-08
  • 打赏
  • 举报
回复
上面那程序是指剔除id里面重复的情况,如果同时有多列重复要剔除,应该指定多列为主键就可以了,下面的程序可以剔除多列同时重复的情况(程序的原理就是在重复列上加上主键,如果多列重复,就用多主键):

DataTable ds=new DataTable();
ds.Columns.Add(new DataColumn("ID",typeof(int)));
ds.Columns.Add(new DataColumn("name",typeof(string)));
//ds.Columns["ID"].Unique=true;
DataRow dr;
dr=ds.NewRow();
dr[0]=1;
dr[1]="a";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=1;
dr[1]="a";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=4;
dr[1]="b";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=1;
dr[1]="a";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=3;
dr[1]="d";
ds.Rows.Add(dr);

dr=ds.NewRow();
dr[0]=4;
dr[1]="b";
ds.Rows.Add(dr);

DataTable ds2=new DataTable();

DataColumn mycol;

mycol=new DataColumn("ID",typeof(int));
ds2.Columns.Add(mycol);

mycol=new DataColumn("name",typeof(string));
ds2.Columns.Add(mycol);

System.Data.DataColumnCollection ColumnCollection = ds2.Columns;
System.Data.DataColumn[] ColumnPK = {ColumnCollection["ID"] ,ColumnCollection["name"]};
ds2.PrimaryKey=ColumnPK;

for (int i=0;i<ds.Rows.Count;i++)
{
try
{
dr=ds2.NewRow();
dr[0]=Convert.ToInt32(ds.Rows[i]["ID"].ToString());
dr[1]=ds.Rows[i]["name"].ToString();
ds2.Rows.Add(dr);
}
catch{}


}

Response.Write(ds2.Rows.Count);


vsstudio05 2007-11-08
  • 打赏
  • 举报
回复
我的问题很确定: 一个DataTable,要求消除重复数据!
但是那个代码我看好像是把里面的数据手动添加进去的???如果有100W个数据量的话,难道都是这样添加??
xuan.ye 2007-11-08
  • 打赏
  • 举报
回复
lz问题不确定

既然不确定的问题,还是不要问
vsstudio05 2007-11-08
  • 打赏
  • 举报
回复
回楼上的,如果DataTable里面的数据是很多的,而且数据量不确定,仅仅要求消除重复数据,那个代码不行吧???

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧