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的我也会。这些数据不是从数据库取的。 展开
品牌 物品 数量
联想 笔记本 2
联想 台式机 10
联想 笔记本 18
戴尔 笔记本 5
想得到这样的结果
品牌 物品 数量
联想 台式机 10
戴尔 笔记本 5
联想 笔记本 20
排序方式无所谓,求大神们指教!
方案是2.0的,没法用Linq、Lambda、var。
不要发SQL了,SQL的我也会。这些数据不是从数据库取的。 展开
展开全部
这样行不行
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);
}
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);
}
展开全部
不能用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();
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以用SQL语句的,
select 品牌,物品,(select count(*) from 你的表 where 品牌='联想' and (物品='台式电脑' or 物品='笔记本电脑'))as 数量 from 你的表,然后再绑定
select 品牌,物品,(select count(*) from 你的表 where 品牌='联想' and (物品='台式电脑' or 物品='笔记本电脑'))as 数量 from 你的表,然后再绑定
追问
数据不是从数据库中取的,是自己声明的DT,自定义的结构,现在要把数据合并,写到数据库中去
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用Linq2DataSet,group by品牌和物品,然后sum数量即可
追问
方案是2.0的,不用LINQ呢?
追答
你可以用linq bridge啊,如果你用vs2008开发一样可以在.net 2.0用linq
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select 品牌,物品,SUM(数量) as shu from 表group by 品牌,数量
追问
数据不是从数据库中取的,是自己声明的DT,自定义的结构,现在要把数据合并,写到数据库中去
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询