有一个DATATABLE DTA,里面的数据有重复,用DISTINCT 把 DTA里重复的数据去除,转成一个新的DATATABLE DTB,不知是否可用DTA-DTB这样的做法。不能用for循环写法,数据量比较大,几万笔。dta的数据并不是从数据库里面查出来的,是从EXCEL汇进来的。比如 dta
1 1 1
2 1 2
1 1 1
2 1 2
3 2 5
3 6 5
要得出dtb
1 1 1
2 1 2
1 1 1
2 1 2
1 1 1
2 1 2
3 2 5
3 6 5
要得出dtb
1 1 1
2 1 2
解决方案 »
- 实际项目中,数据库开发是由专门的数据库管理员来做吗?
- 我想请教各位一个问题,是关于登陆框方面的问题.我输入用户名和密码之后 ,(我的用户名和密码在数据库的表中已存在,且是正确的)DEBUG时,说的我的输入的用户名和密码是错误的.各位抽空给我看看错出在那里
- 怎么最加插入text类型数据
- 一个dategridview获取值的问题
- 关于控件的OnMouseEnter和OnMouseLeave的问题
- 大学毕业后想做.Net工程师,要选什么方向
- oledb 连接winform 正常,asp.net 却无法连接 在线等~~~
- 一个多线程,SOCKET连接与发送数据的例子。
- 请问一下在C#中怎么在输出时实现一个float型数的四舍五入?
- 怎么把任意格式的文件存到数据库中?
- contextmenustrip使用问题
- C# winform程序中怎样实现tabcontrol控件中的tabpage动态的隔一段时间轮换一页
string[] distinctcols = new string[(DTA.Columns.Count)];
foreach (DataColumn dc in DTA.Columns)
{
distinctcols[dc.Ordinal] = dc.ColumnName;
}
DataView mydataview = new DataView(DTA);
DataTable DTB= mydataview.ToTable(true, distinctcols);
另外,考虑到效率的话,先全表导入,内存中操作,写一个快速排序,这样说来,用for是效率最高的
public static bool CheckReduplicated(DataTable dt, ref string strMsg, params string[] keyFields)
{
string f = "";
for (int i = 0; i < keyFields.Length; i++)
{
if (i != keyFields.Length - 1)
f += keyFields[i] + ",";
else
f += keyFields[i] + " ASC";
} dt.DefaultView.Sort = f;
DataTable temp = dt.DefaultView.ToTable();
for (int i = 0; i < temp.Rows.Count; i++)
{
DataRow dr = temp.Rows[i];
if (i > 0)
{
DataRow dr_pre = temp.Rows[i - 1]; bool isReduplicated = true;
foreach (string s in keyFields)
{
string value = dr[s].ToString();
string value_pre = dr_pre[s].ToString(); if (value != value_pre)
{
isReduplicated = false;
}
} if (isReduplicated)
{
if (strMsg.Length > 0)
{
strMsg += " ";
} foreach (string s in keyFields)
{
strMsg += string.Format(@"[{0}:{1}]", s, dr[s].ToString());
} strMsg += "有重复."; return true;
}
}
} return false;
}