C#winform中如何最快得到datatable表中的所有重复行 datatable表是读取的excel文件 我想读取表里面的所有重复行 组合主键为3个字段。我的excel文件有2万条记录。一条一条的比方法太慢。要等上10分钟,用datatable.primarykey方法也慢。请各位大侠指点一个最快的方法。谢谢~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你读取的时候可以用sql,distinct一下,否则也只好冒泡比对了 你读取的时候可以用sql,distinct一下,否则也只好冒泡比对了 装DataTable的时候就开始比对,每新增一条就比对一次。或者可以这样,先不装入DataTable,存入一个HashTable,每新增一条就比对一次,这样更快。 参考:http://blog.csdn.net/q107770540/article/details/5784646继承自IEqualityComparer 使用linq2datatable来实现distict你先自己试一下,不行的话晚上我再给你写个DEMO linq groupby conut(重复的字段)>1 不好意思 linq我刚接触 昨天就看了一下午了 越看越晕。。 datatable吗,用linq最快.可以直接进行筛选 linq 不大会 能写点代码做参考吗? 问7楼的Tim吧,他是大神,我这几天也正在学linq,有问题都是问的他.另外我刚学到分组,你这个问题我还真不会整. void Main(){ DataTable dt=new DataTable(); dt.Columns.Add("id1",typeof(int)); dt.Columns.Add("id2",typeof(int)); dt.Columns.Add("id3",typeof(int)); dt.Columns.Add("name"); dt.Rows.Add(1,1,1,"Tim"); dt.Rows.Add(1,1,1,"Tim1"); dt.Rows.Add(1,1,1,"Tim2"); dt.Rows.Add(1,1,1,"Tim3"); dt.Rows.Add(2,2,2,"Tom"); dt.Rows.Add(2,2,2,"Tom"); dt.Rows.Add(3,1,1,"Tam"); dt.Rows.Add(3,1,1,"Tbm"); dt.Rows.Add(4,1,1,"Tcm"); dt.Rows.Add(5,1,1,"Tdm"); var query=dt.AsEnumerable().GroupBy(t=>new{id1=t.Field<int>("id1"),id2=t.Field<int>("id2"),id3=t.Field<int>("id3")}) .Where(g=>g.Count()>1) //找出重复行 .Select(g=>new{g.Key.id1,g.Key.id2,g.Key.id3,c=g.Count()}); } 如果说我的主键字段是存放在数据库中的,每个表都有不同的主键。 我从数据库中得到主键字段后,怎么把Field<int>()括号里面的字段名字变成变量? 分组查询一下就可以了,可以用Linq查询,也可以SQL c#中如何将文本框中的数据赋值给二维数组 ActiveReports For.NET3.0安装成功却在VS2008新增中找不到? 求两句正则 急,急,datatable问题?? 如何将ACCESS里面的数据转到SQL SERVER 2005中。 使用Split后汉字成乱码怎么解决啊? C# winform listview 添加按、图像、文本 Winform中如何设置DataGrid列头的高度(注意是Winform啦,不要再发WebForm的了) 菜鸟求教,并非所有的代码路径都有返回值 请教:关于窗体继承(弄不明白) C#多线程的使用问题 架构问题,高手进!
http://blog.csdn.net/q107770540/article/details/5784646继承自IEqualityComparer
使用linq2datatable来实现distict你先自己试一下,不行的话晚上我再给你写个DEMO
datatable吗,用linq最快.可以直接进行筛选
问7楼的Tim吧,他是大神,我这几天也正在学linq,有问题都是问的他.
另外我刚学到分组,你这个问题我还真不会整.
void Main()
{
DataTable dt=new DataTable();
dt.Columns.Add("id1",typeof(int));
dt.Columns.Add("id2",typeof(int));
dt.Columns.Add("id3",typeof(int));
dt.Columns.Add("name");
dt.Rows.Add(1,1,1,"Tim");
dt.Rows.Add(1,1,1,"Tim1");
dt.Rows.Add(1,1,1,"Tim2");
dt.Rows.Add(1,1,1,"Tim3");
dt.Rows.Add(2,2,2,"Tom");
dt.Rows.Add(2,2,2,"Tom");
dt.Rows.Add(3,1,1,"Tam");
dt.Rows.Add(3,1,1,"Tbm");
dt.Rows.Add(4,1,1,"Tcm");
dt.Rows.Add(5,1,1,"Tdm");
var query=dt.AsEnumerable().GroupBy(t=>new{id1=t.Field<int>("id1"),id2=t.Field<int>("id2"),id3=t.Field<int>("id3")})
.Where(g=>g.Count()>1) //找出重复行
.Select(g=>new{g.Key.id1,g.Key.id2,g.Key.id3,c=g.Count()});
}