c#中同一个Datatable中的如何把重复的记录合并起来,

2024-11-24 00:21:42
推荐回答(5个)
回答1:

DataTable dt1 = GetDataTable();//你说的DataTable
DataTable dt2 = dt1.Clone();//复制下你说的那个表的表结构

DataRow[] drs = null;
foreach( DataRow dr in dt1 ) {
drs = dt2.Select( "姓名='" + dr["姓名"].ToString() + "'" );//查找dt2的重复数据
if( drs.Length > 0 ) {
drs["数量"] = drs["数量"] + dr["数量"];//将数量累加
}
else {
dt2.newrow;//dt2里边new一个新行,把数据加进去
}

}

dt2即为所求。

写的有点马虎,没有环境,希望能对你有所帮助

回答2:

如果说放入之前能判断一下再放进去的话,你可以设置DATATABLE的PrimaryKey 。但是具体情况一定要先放进去了再来删除或合并相同的记录,好像没有更好的方法,那位如果知道更好的方法请告诉一声,我也想知道。没有别的办法就是只能遍历整个Datatable了,遍历的方法,前面的兄台有写。我觉得设置主键还是有好处的,查找数据还是要方便一些

回答3:

这种需求,在数据库中处理是比较合适的方法

SQL 的写法:

SELECT [名字], SUM([数量]) AS [数量] FROM 表名 GROUP BY [名字]

回答4:

DataTable d=new DataTable();
int i = 0;
foreach (DataRow dr in d.Table.Rows)
{
if (dr["名字"].ToString() == "李阳")
i += (int)dr["数量"];
}
return i;

回答5:

public static DataTable ToDt(DataTable dtTemp)
        {
            if (dtTemp != null)
            {
                DataTable dt = dtTemp;

                //对dt中数据以名称进行升序排序
                DataView dv = new DataView(dt);
                dv.Sort = "OrderNumber asc";
                //去重复数据
                DataTable dtRs = dv.ToTable(true);  
                for (int i = 0; i < dtRs.Rows.Count; i++)
                {
                    DataRow temp = dtRs.Rows[i];
                    int Qty = 0; 
                    //循环排序后的数据dv
                    foreach (DataRowView dr1 in dv)
                    { 
                        if (temp["OrderNumber"].ToString() == dr1["OrderNumber"].ToString())
                        {
                            Qty += Convert.ToInt32(dr1["Qty"]);
                            dtRs.Rows[i]["Qty"] = Qty; 
                        }  
                    } 
                }
                return dtRs;
            }
            else
            {
                return null;

            }
        }