ASP.NET C# 如何合并DataTable中的重复数据(做数据整合)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET C# 如何合并DataTable中的重复数据(做数据整合)相关的知识,希望对你有一定的参考价值。
现在我有一个DataTable,数据源的格式是这样的
品牌 物品 数量
联想 笔记本 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);
参考技术A 不能用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();
select 品牌,物品,(select count(*) from 你的表 where 品牌='联想' and (物品='台式电脑' or 物品='笔记本电脑'))as 数量 from 你的表,然后再绑定追问
数据不是从数据库中取的,是自己声明的DT,自定义的结构,现在要把数据合并,写到数据库中去
参考技术C 使用Linq2DataSet,group by品牌和物品,然后sum数量即可追问方案是2.0的,不用LINQ呢?
追答你可以用linq bridge啊,如果你用vs2008开发一样可以在.net 2.0用linq
参考技术D select 品牌,物品,SUM(数量) as shu from 表group by 品牌,数量追问数据不是从数据库中取的,是自己声明的DT,自定义的结构,现在要把数据合并,写到数据库中去
以上是关于ASP.NET C# 如何合并DataTable中的重复数据(做数据整合)的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET C#中如何在excel中下载gridview,即如何在datatable中使用group by
C# ASP.NET怎么手动给GridView赋值,不从数据库中读取?
Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据