datatable表是读取的excel文件 我想读取表里面的所有重复行 组合主键为3个字段。我的excel文件有2万条记录。一条一条的比方法太慢。要等上10分钟,用datatable.primarykey方法也慢。请各位大侠指点一个最快的方法。谢谢~~~

解决方案 »

  1.   

    你读取的时候可以用sql,distinct一下,否则也只好冒泡比对了
      

  2.   

    你读取的时候可以用sql,distinct一下,否则也只好冒泡比对了
      

  3.   

    装DataTable的时候就开始比对,每新增一条就比对一次。或者可以这样,先不装入DataTable,存入一个HashTable,每新增一条就比对一次,这样更快。
      

  4.   

    参考:
    http://blog.csdn.net/q107770540/article/details/5784646继承自IEqualityComparer  
    使用linq2datatable来实现distict你先自己试一下,不行的话晚上我再给你写个DEMO
      

  5.   

    linq  groupby conut(重复的字段)>1
      

  6.   

    不好意思 linq我刚接触 昨天就看了一下午了 越看越晕。。
      

  7.   


    datatable吗,用linq最快.可以直接进行筛选
      

  8.   

    linq 不大会 能写点代码做参考吗?
      

  9.   


    问7楼的Tim吧,他是大神,我这几天也正在学linq,有问题都是问的他.
    另外我刚学到分组,你这个问题我还真不会整.
      

  10.   


    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()});
     
    }
      

  11.   

    如果说我的主键字段是存放在数据库中的,每个表都有不同的主键。 我从数据库中得到主键字段后,怎么把Field<int>()括号里面的字段名字变成变量?
      

  12.   

    分组查询一下就可以了,可以用Linq查询,也可以SQL