首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

datatable 怎么 把 重复的数据相加

2013-06-25 
datatable 如何 把 重复的数据相加我查到的dt币制名称应收金额实收金额 RMB100100 USP1123 USP3214 JPY211

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);
            }
[解决办法]

引用:
Quote: 引用:


   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.实收金额);
            }




不好用 啊高手 

怎么不好用了
[解决办法]
不推荐用linq,背后的操作实际效率不高 。直接操作datatable也不复杂 

热点排行