解决方案 »

  1.   

    应该在sql查询的时候就 去掉
      

  2.   

    string expression = colName + "='" + dtCardNo.Rows[i][0].ToString() + "' and " + colName2 + "='" + dtCardNo.Rows[i][0].ToString() + '" ;
      

  3.   

     
            //
            // 摘要:
            //     根据现有 System.Data.DataView 中的行,创建并返回一个新的 System.Data.DataTable。
            //
            // 参数:
            //   distinct:
            //     如果为 true,则返回的 System.Data.DataTable 将包含所有列都具有不同值的行。 默认值为 false。
            //
            //   columnNames:
            //     一个字符串数组,包含要包括在返回的 System.Data.DataTable 中的列名的列表。 System.Data.DataTable 包含指定的列,其顺序与这些列在该数组中的顺序相同。
            //
            // 返回结果:
            //     一个新的 System.Data.DataTable 实例,其中包含所请求的行和列。
            public DataTable ToTable(bool distinct, params string[] columnNames);
      

  4.   


    这个不对吧,dtCardNo只剩下某一列的不重复值了,另一个关键列都被删了。我的意思是根据两列连接起来作为关键字来去重复。
      

  5.   

    大家看看这样行不?            DataTable dtcpoy = finalDataSet.Tables["Qs"];
                DataView dv = dtcpoy.DefaultView;
                DataTable table = dv.ToTable(true, new string[] { "QCode", "OKey", "OValue" ,"COrder"});            finalDataSet.Tables.Remove(finalDataSet.Tables["Qs"]);  //删除旧表
                finalDataSet.Tables.Add(table);     //添加新表跑了一下,貌似ToTable留下的是每列不重复值的最大行数。由于我那个表的后三个字段是一致的,所以,看结果貌似也行。
      

  6.   

                for (int i = 0; i < dtCardNo.Rows.Count; i++)
                 {
                           这里查询从 0 到 i-1 行为止,有没有至少一行、其指定的两列的值与当前行(第 i 行)都相同的
                 }
      

  7.   

    如果你学习过数据结构或者算法课程,我就提醒你应该注意到,这种双层循环扫描,其时间复杂度是 o(n^2)  数量级的。因此当这里的 n 很大时,应该使用快速排序方案,改变算法,将时间复杂度控制在 o(n * log(n)) 数量级水平,提高十万倍速度。
      

  8.   

    大数据量,建议应该在输出数据集的时候,在SQL SERVER处理好,减少对客户端(如果系统两层)的压力在程序处理的话,不能硬性两个for循环,就像#9讲的时间复杂度的问题,效率会很低
    先做排序,然后折半查找替换
      

  9.   

    大数据量,其实把数据写到数据库里、再读取出来,仅仅这个输入输出,就比“查重”操作多花许多许多时间。而且在内存中进行正确的简单的计算,肯定比数据库系统执行起来要快!我的意见是,不但要会使用 sql 查询,也要会自己写计算用的代码。
      

  10.   

    如果是两层的架构,内存中计算,我想不如在服务器(SQL SERVER处理好)效率高,毕竟服务器配置和pc机(一般)不是一个level的。
      

  11.   

    1.最好Sql的时候就去重;
    2.将DataSet转成Linq操作。比如:
    使用GroupBy:对需要Distinct的字段进行分组,取组内的第一条记录这样结果就是Distinct的数据了。
    Console.WriteLine("Distinct1 By: A");  
    var query1 = from e in User.GetData()  
                 group e by new { e.A } into g  
                 select g.FirstOrDefault();  
    foreach (var u in query1)  
        Console.WriteLine(u.ToString());  或者自己写扩展方法
    public static class MyEnumerableExtensions  
    {  
            public static IEnumerable<TSource> DistinctBy<TSource, TKey>  (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)  
           {  
                HashSet<TKey> seenKeys = new HashSet<TKey>();  
                foreach (TSource element in source)  
                {  
                if (seenKeys.Add(keySelector(element))) { yield return element; }  
                }  
           }  
    }  var query3 = User.GetData().DistinctBy(x => new { x.A, x.B, x.C });  
      

  12.   

    去除重复值我都是在SQL中处理的。相对来说会比较容易些。
      

  13.   

    datatable defaultview totable里面可以去重复。
      

  14.   

    用Linq可以操作就可以了,不过操作效率会有点慢,这个要看数据量了
    建议还是用sql distinct或者group by 去除重复的数据,用程序处理虽好,但改进效率的所花时间较多,还不如用sql+索引提高来得省时间
      

  15.   


    我也想用sql呀,但是数据是从几十个同名的小数据库里面Fill到DataSet的,没法用sql。只能在DataSet里面凑合处理了