ASP.NET C# 如何合并DataTable中的重复数据(做数据整合)

现在我有一个DataTable,数据源的格式是这样的品牌物品数量联想笔记本2联想台式机10联想笔记本18戴尔笔记本5想得到这样的结果品牌物品数量联想台式机10戴尔笔记本5... 现在我有一个DataTable,数据源的格式是这样的
品牌 物品 数量
联想 笔记本 2
联想 台式机 10
联想 笔记本 18
戴尔 笔记本 5

想得到这样的结果
品牌 物品 数量
联想 台式机 10
戴尔 笔记本 5
联想 笔记本 20

排序方式无所谓,求大神们指教!
方案是2.0的,没法用Linq、Lambda、var。

不要发SQL了,SQL的我也会。这些数据不是从数据库取的。
展开
 我来答
约翰约深Zt
2012-06-14 · TA获得超过410个赞
知道小有建树答主
回答量:102
采纳率:0%
帮助的人:94.5万
展开全部
这样行不行

DataTable dt = new DataTable();
dt.Columns.Add("品牌");
dt.Columns.Add("物品");
dt.Columns.Add("数量");
DataRow dr = dt.NewRow();
dr[0] = "联想";
dr[1] = "笔记本";
dr[2] = "2";
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = "联想";
dr[1] = "台式机";
dr[2] = "10";
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = "联想";
dr[1] = "笔记本";
dr[2] = "18";
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = "戴尔";
dr[1] = "笔记本";
dr[2] = "5";
dt.Rows.Add(dr);

Dictionary<string, int> dic = new Dictionary<string, int>();
for (int i = 0; i < dt.Rows.Count; i++)
{
string name=dt.Rows[i][0].ToString() +"&"+ dt.Rows[i][1].ToString();
if (dic.ContainsKey(name))
{
dic[name]+=Convert.ToInt32(dt.Rows[i][2]);
}
else
{
dic.Add(name, Convert.ToInt32(dt.Rows[i][2]));
}

}

DataTable dt2 = dt.Copy();
dt2.Rows.Clear();
foreach (KeyValuePair<string, int> item in dic)
{
string[] name = item.Key.Split('&');
DataRow newdr = dt2.NewRow();
newdr[0] = name[0];
newdr[1] = name[1];
newdr[2] = item.Value;
dt2.Rows.Add(newdr);

}
TableDI
2024-07-18 广告
在上海悉息信息科技有限公司,我们深知Excel在数据处理中的重要作用。在Excel中引用不同工作表(sheet)的数据是常见的操作,这有助于整合和分析跨多个工作表的信息。通过在工作表名称前加上感叹号“!”,您可以轻松地引用其他工作表中的数据... 点击进入详情页
本回答由TableDI提供
百度网友baf3962
推荐于2018-04-11 · TA获得超过667个赞
知道小有建树答主
回答量:204
采纳率:100%
帮助的人:130万
展开全部
不能用linq,新建一个datatable,只能遍历求和拉,往新datatable里面写。。。
追问
具体方法呢?
追答
这样肯定可以,写了好一会儿了,参考着写吧,测试通过的。。。 
DataTable dtProduct = new DataTable("Product");
dtProduct.Columns.Add("品牌", typeof(String));
dtProduct.Columns.Add("物品", typeof(String));
dtProduct.Columns.Add("数量", typeof(Int32));
DataRow row = dtProduct.NewRow();
row[0] = "联想";
row[1] = "台式机";
row[2] = 1;
dtProduct.Rows.Add(row);
row = dtProduct.NewRow();
row[0] = "联想";
row[1] = "台式机";
row[2] = 2;
dtProduct.Rows.Add(row);
row = dtProduct.NewRow();
row[0] = "联想";
row[1] = "台式机";
row[2] = 3;
dtProduct.Rows.Add(row);
row = dtProduct.NewRow();
row[0] = "惠普";
row[1] = "台式机";
row[2] = 1;
dtProduct.Rows.Add(row);
row = dtProduct.NewRow();
row[0] = "惠普";
row[1] = "台式机";
row[2] = 10;
dtProduct.Rows.Add(row);
DataTable dt= new DataTable("Product2");
dt.Columns.Add("品牌", typeof(String));
dt.Columns.Add("物品", typeof(String));
dt.Columns.Add("数量", typeof(Int32));
foreach (DataRow dr in dtProduct.Rows)
{
DataRow[] drs = dt.Select("品牌='" + dr["品牌"] + "' and 物品='" + dr["物品"] + "'");
if (drs.Length < 1)
{
row = dt.NewRow();
row[0] = dr["品牌"]+"";
row[1] = dr["物品"] + "";
row[2] = int.Parse(dr["数量"] + "");
dt.Rows.Add(row);
}
else
{
drs[0].BeginEdit();
drs[0]["数量"] = int.Parse(drs[0]["数量"]+"") + int.Parse(dr["数量"]+"");
drs[0].EndEdit();
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
程自挺
2012-06-14 · 超过28用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:66.5万
展开全部
你可以用SQL语句的,
select 品牌,物品,(select count(*) from 你的表 where 品牌='联想' and (物品='台式电脑' or 物品='笔记本电脑'))as 数量 from 你的表,然后再绑定
追问
数据不是从数据库中取的,是自己声明的DT,自定义的结构,现在要把数据合并,写到数据库中去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
草薙在
2012-06-14 · TA获得超过4795个赞
知道大有可为答主
回答量:6187
采纳率:50%
帮助的人:6232万
展开全部
使用Linq2DataSet,group by品牌和物品,然后sum数量即可
追问
方案是2.0的,不用LINQ呢?
追答
你可以用linq bridge啊,如果你用vs2008开发一样可以在.net 2.0用linq
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4a7eeafb58
2012-06-14 · 超过27用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:46.1万
展开全部
select 品牌,物品,SUM(数量) as shu from 表group by 品牌,数量
追问
数据不是从数据库中取的,是自己声明的DT,自定义的结构,现在要把数据合并,写到数据库中去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式