public void qudiaoduoyu()
        {
                public DataTable dt = new DataTable();
                int aa = 0;
                string row1 = myDataSet.Tables[0].Rows[0]["订单号码"].ToString();//取表的第一行
                string row2 = myDataSet.Tables[0].Rows[0]["邮件号"].ToString();//取表的第一行
                DataRow[] drr = myDataSet.Tables[0].Select(" 订单号码='"+row1 + "'");
                DataRow[] drr1 = myDataSet.Tables[0].Select(" 订单号码='"+row2 + "'");
                BLL.kuaidifeiyong mykuaidifeiyong = new BLL.kuaidifeiyong();
                DataRow dr = myDataSet.Tables[0].NewRow();//临时新的行
                dr["收寄日期"] = drr1[0]["收寄日期"].ToString();
                dr["订单号码"] = drr1[0]["订单号码"].ToString();
                if (drr1[0]["订单金额"] != null && drr1[0]["订单金额"].ToString() != "")
                    dr["订单金额"] = decimal.Parse(drr1[0]["订单金额"].ToString());
                if (drr1[0]["单位"] != null)
                    dr["单位"] = drr1[0]["单位"].ToString();
                if (drr1[0]["寄达地"] != null)
                    dr["寄达地"] = drr1[0]["寄达地"].ToString();
                if (drr1[0]["省"] != null)
                    dr["省"] = drr1[0]["省"].ToString();
                dr["快递公司"] = drr1[0]["快递公司"].ToString();
                dr["邮件号"] = drr1[0]["邮件号"].ToString();
                dr["重量"] = decimal.Parse(drr1[0]["重量"].ToString());
                dr["件数"] = int.Parse(drr1[0]["件数"].ToString());
                dr["邮费"] = decimal.Parse(drr1[0]["邮费"].ToString());
                dr["备注"] = drr1[0]["备注"].ToString();
                if (drr1[0]["省"] != null)
                    dr["我算运费"] = feiyongjisuan(drr1[0]["邮件号"].ToString(), drr1[0]["省"].ToString(), decimal.Parse(drr1[0]["重量"].ToString()));
                if (drr.Length > 1 && drr[0]["邮件号"].ToString() != "")
                {
                    aa += 1;
                    drr1 = myDataSet.Tables[0].Select(" 邮件号='-1'");
                    dr["订单号码"] = drr[0]["订单号码"].ToString();
                    dr["订单金额"] = decimal.Parse(drr[0]["订单金额"].ToString());
                    decimal zl = 0;
                    int js = 0;
                    decimal yf = 0;
                    decimal wsyf = 0;
                    foreach (DataRow dr11 in drr)
                    {
                        if (dr["邮件号"].ToString().IndexOf(dr11["邮件号"].ToString()) == -1)
                            dr["邮件号"] = dr["邮件号"] + "," + dr11["邮件号"].ToString();
                        zl += decimal.Parse(dr11["重量"].ToString());
                        js += int.Parse(dr11["件数"].ToString());
                        yf += decimal.Parse(dr11["邮费"].ToString());
                        wsyf += feiyongjisuan(dr11["邮件号"].ToString(), dr11["省"].ToString(), decimal.Parse(dr11["重量"].ToString()));
                        myDataSet.Tables[0].Rows.Remove(dr11);//清除此类的行
                    }
                    dr["重量"] = zl;
                    dr["件数"] = js;
                    dr["邮费"] = yf;
                    dr["我算运费"] = wsyf;
                    dr["比例"] = wsyf / decimal.Parse(dr["订单金额"].ToString());                }
                decimal ddje = 0;
                if (drr1.Length > 1 && drr1[0]["邮件号"].ToString() != "")
                {
                    aa += 1;
                    dr["邮件号"] = drr1[0]["邮件号"].ToString();
                    dr["重量"] = decimal.Parse(drr1[0]["重量"].ToString());
                    dr["件数"] = int.Parse(drr1[0]["件数"].ToString());
                    dr["邮费"] = decimal.Parse(drr1[0]["邮费"].ToString());
                    dr["我算运费"] = feiyongjisuan(drr1[0]["邮件号"].ToString(), drr1[0]["省"].ToString(), decimal.Parse(drr1[0]["重量"].ToString()));
                    foreach (DataRow dr22 in drr1)
                    {
                        if (dr["订单号码"].ToString().IndexOf(dr22["订单号码"].ToString()) == -1)
                            dr["订单号码"] = dr["订单号码"] + "," + dr22["订单号码"].ToString();
                        ddje += decimal.Parse(dr22["订单金额"].ToString());
                        myDataSet.Tables[0].Rows.Remove(dr22);//清除此类的行
                    }
                    dr["订单金额"] = ddje;
                    dr["比例"] = decimal.Parse(dr["我算运费"].ToString()) / decimal.Parse(dr["订单金额"].ToString());
                    dr["备注"] = "合并";
                }
                if (aa == 0)
                {
                    myDataSet.Tables[0].Rows.Remove(drr1[0]);//清除此类的行
                }
                myDataSet.Tables[0].Rows.Add(dr);//添加临时新的行数据
                qudiaoduoyu();
        }

解决方案 »

  1.   

    在查询的时候 sql  select distinct * from 
      

  2.   

    代码大概意思是:现有一张dataset,里面有“订单号码”或“邮件号”重复的数据,新建一个datatable,用递归遍历dataset,不重复的直接加到datatable里面,重复的合并以后加到datatable,然后移除dataset的已查询到的一条或多条数据
      

  3.   

    用sql 比较好吧 先查询 不重复的 读出来给 dataset
     剩下的就是重复的 然后 把重复的读出来 在操作
      

  4.   

    distinct 根据条件创建视图读视图 
      

  5.   

    SQL删除重复数据只保留一条 . 
    用SQL语句,删除掉重复项只保留一条
    在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢
    1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 
    select * from people 
    where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 
    delete from people 
    where   peopleName in (select peopleName    from people group by peopleName      having count(peopleName) > 1) 
    and   peopleId not in (select min(peopleId) from people group by peopleName     having count(peopleName)>1) 3、查找表中多余的重复记录(多个字段) 
    select * from vitae a 
    where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 
    delete from vitae a 
    where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 
    and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录 
    select * from vitae a 
    where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 
    and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)   6.消除一个字段的左边的第一位:update tableName set [Title]=Right([Title],(len([Title])-1)) where Title like '村%'7.消除一个字段的右边的第一位:update tableName set [Title]=left([Title],(len([Title])-1)) where Title like '%村'8.假删除表中多余的重复记录(多个字段),不包含rowid最小的记录 
    update vitae set ispass=-1
    where peopleId in (select peopleId from vitae group by peopleId
     
      

  6.   

    同上,sql处理最方便,不用sql的话,也构建实体,用实体的泛型集合。里面有更多可用的筛选方法,你这么写自己都会晕的。还有,尽量不要使用中文作为列名。。