• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

c#DataTable行转列

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
/// <summary>
        /// datatable行转列
        /// </summary>
        /// <param name="dtSrc">来源datatable</param>
        /// <returns>行转列结束的datatable</returns>
        private System.Data.DataTable ConvertDataTable(System.Data.DataTable dt)
        {
            var date = this.dtpStartDay.Text + "到" + this.dtpEndDay.Text;
            var list = from c in dt.AsEnumerable()
                       select new {
                           日期 = c.Field<string>("日期"),
                           财务编号 = c.Field<string>("财务编号"),
                           财务名称 = c.Field<string>("财务名称"),
                           平台名称 = c.Field<string>("平台名称"),
                           面值 = Convert.ToDecimal(c.Field<string>("面值"))
                       };          

            var tmplist = (from item in list
                           group item by item.财务编号 into g
                           select new
                           {
                               code = g.Key,
                               vallist = from val in g
                                         group val by val.平台名称 into gs
                                         select new
                                         {
                                             pltname = gs.Key,
                                             pltvalue = gs.Sum(t => t.面值)
                                         }
                           }).ToList();

            dt = new System.Data.DataTable();
            dt.Columns.Add("日期");
            dt.Columns.Add("财务编号");
            dt.Columns.Add("财务名称");
            var colNames = list.Select(t => t.平台名称).Distinct();
            foreach (var col in colNames)
            {
                dt.Columns.Add(col);
            }
            dt.Columns.Add("平台合计");

            foreach (var item in tmplist)
            {
                var dr = dt.NewRow();

                dr.BeginEdit();
                dr["日期"] = date;
                dr["财务编号"] = item.code;
                dr["财务名称"] = list.FirstOrDefault(t => t.财务编号 == item.code).财务名称;
                dr["平台合计"] = item.vallist.Sum(t => t.pltvalue);

                foreach (var col in colNames)
                {
                    if (item.vallist.Any(t => t.pltname == col))
                    {
                        dr[col] = item.vallist.Single(t => t.pltname == col).pltvalue;
                    }
                    else
                    {
                        dr[col] = 0;
                    }
                }

                dr.EndEdit();
                dt.Rows.Add(dr);
            }
            return dt;
        }

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#之二十三打印和水晶报表发布时间:2022-07-18
下一篇:
C#设计模式总结发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap