c#中同一个Datatable中的如何把重复的记录合并起来,
Datatable中有两个列名,第一个列名是:名字,第二个列名是:数量这里的有这样的记录:记录1、[名字]=李洋[数量]=13记录2、[名字]=李洋[数量]=18我想要的...
Datatable中有两个列名,第一个列名是:名字,第二个列名是:数量
这里的有这样的记录:记录1、[名字]=李洋 [数量]=13
记录2、[名字]=李洋 [数量]=18
我想要的结果是: [名字]=李洋 [数量]=31
请给出代码,谢谢!!!
现在因为特殊原因,必须得在datatable里完成,在数据库里做这样的操作是在简单不过了,呵呵这样的问题我不是会来这上面问的,呵呵谢谢你,,, 展开
这里的有这样的记录:记录1、[名字]=李洋 [数量]=13
记录2、[名字]=李洋 [数量]=18
我想要的结果是: [名字]=李洋 [数量]=31
请给出代码,谢谢!!!
现在因为特殊原因,必须得在datatable里完成,在数据库里做这样的操作是在简单不过了,呵呵这样的问题我不是会来这上面问的,呵呵谢谢你,,, 展开
6个回答
展开全部
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即为所求。
写的有点马虎,没有环境,希望能对你有所帮助
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即为所求。
写的有点马虎,没有环境,希望能对你有所帮助
展开全部
如果说放入之前能判断一下再放进去的话,你可以设置DATATABLE的PrimaryKey 。但是具体情况一定要先放进去了再来删除或合并相同的记录,好像没有更好的方法,那位如果知道更好的方法请告诉一声,我也想知道。没有别的办法就是只能遍历整个Datatable了,遍历的方法,前面的兄台有写。我觉得设置主键还是有好处的,查找数据还是要方便一些
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种需求,在数据库中处理是比较合适的方法
SQL 的写法:
SELECT [名字], SUM([数量]) AS [数量] FROM 表名 GROUP BY [名字]
SQL 的写法:
SELECT [名字], SUM([数量]) AS [数量] FROM 表名 GROUP BY [名字]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DataTable d=new DataTable();
int i = 0;
foreach (DataRow dr in d.Table.Rows)
{
if (dr["名字"].ToString() == "李阳")
i += (int)dr["数量"];
}
return i;
int i = 0;
foreach (DataRow dr in d.Table.Rows)
{
if (dr["名字"].ToString() == "李阳")
i += (int)dr["数量"];
}
return i;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询