datatable 如何 把 重复的数据相加
我查到的dt
币制名称 应收金额 实收金额
RMB 100 100
USP 11 23
USP 32 14
JPY 21 12
要显示的dt
币制名称 应收金额 实收金额
RMB 100 100
USP 43 37
JPY 21 12
谢拉
[解决办法]
DataTable dt = new DataTable();
dt.Columns.Add("币制名称", typeof(String));
dt.Columns.Add("应收金额", typeof(Decimal));
dt.Columns.Add("实收金额", typeof(Decimal));
DataRow dr1 = dt.NewRow();
dr1["币制名称"] = "RMB";
dr1["应收金额"] = 100;
dr1["实收金额"] = 100;
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["币制名称"] = "USP";
dr2["应收金额"] = 11;
dr2["实收金额"] = 23;
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3["币制名称"] = "USP";
dr3["应收金额"] = 32;
dr3["实收金额"] = 14;
dt.Rows.Add(dr3);
DataRow dr4 = dt.NewRow();
dr4["币制名称"] = "JPY";
dr4["应收金额"] = 21;
dr4["实收金额"] = 12;
dt.Rows.Add(dr4);
var query = from d in dt.AsEnumerable()
group d by d.Field<String>("币制名称") into g
select new
{
币制名称 = g.Key,
应收金额 = g.Sum(x => x.Field<Decimal>("应收金额")),
实收金额 = g.Sum(x => x.Field<Decimal>("实收金额"))
};
foreach (var q in query)
{
Console.WriteLine(q.币制名称 + "\t" + q.应收金额 + "\t" + q.实收金额);
}
[解决办法]
DataTable oDT = new DataTable();
SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=Users;Persist Security Info=True;User ID=sa;Password=tpsw2809");
DataSet oDS = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter("select * from collectionamount order by [Name]", conn);
sda.Fill(oDS);
oDT = oDS.Tables[0];
DataTable oNewTable = oDT.Clone();
var query = from p in oDT.AsEnumerable()
group p by p.Field<string>("Name") into m
select new {
moneyName = m.First().Field<string>("Name"),
needAmount = m.Sum(n=>n.Field<decimal>("NeedAmount")),
infactAmount = m.Sum(n => n.Field<decimal>("InfactAmount"))
};
foreach(var item in query)
{
DataRow r = oNewTable.NewRow();
r[0] = item.moneyName;
r[1] = item.needAmount;
r[2] = item.infactAmount;
oNewTable.Rows.Add(r);
}
[解决办法]
怎么不好用了
[解决办法]
不推荐用linq,背后的操作实际效率不高 。直接操作datatable也不复杂