c# DataTable行转列

摘要:
/////datatable行到列转换//////源数据表//行到列的转换结束时的数据表privateSystem。数据DataTableConvertDataTable(System.Data.DataTabledt){vardate=此
/// <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;
        }

  

免责声明:文章转载自《c# DataTable行转列》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇offsetleft、offsetTop、offsetParent的兼容性问题删除数据高级用法:delete,truncate下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DataTable某一列的最大值

1.datatable.compute("max(列名)","")eg:  int max_Idx_Number = 1;     int.TryParse(Convert.ToString(dtGvModel.Compute("max(" + POR_WORK_ORDER_REC_FIELDS.FIELD_IDX_NUMBER + ")", "")),...

.net平台下C#socket通信(上)

完全是基础,新手可以随意看看,大牛可以关闭浏览页了,哈哈。 在开始介绍socket前先补充补充基础知识,在此基础上理解网络通信才会顺理成章,当然有基础的可以跳过去了。都是废话,进入正题。   TCP/IP:Transmission Control Protocol/Internet Protocol,传输控制协议/因特网互联协议,又名网络通讯协议。简单来说...

asp.net2.0导出pdf文件完美解决方案[转载]

PDF简介:PDF(Portable Document Format)文件格式是Adobe公司开发的电子文件格式。这种文件格式与操作系统平台无关,也就是说,PDF文件不管是在Windows,Unix还是在苹果公司的Mac OS操作系统中都是通用的。这一特点使它成为在Internet上进行电子文档发行和数字化信息传播的理想文档格式。越来越多的电子图书、产品说...

sqlserver超时时间已到

public DataTable GetProDataTable(string produceName, SqlParameter[] para) { DataTable dt = new DataTable(); SqlCommand command = new SqlCommand(pro...

C#对DataGridView进行添加、修改、删除数据操作

数据库用的是本地服务器(MySql): 设定全局变量:         MySqlConnection conn;         MySqlDataAdapter adapter;         MySqlTransaction trans; 1.  // 数据库联接         private System.Data.DataTable dbco...

C# 日期格式的处理与数据库表日期类型

数据库表内DateTime类型可以精确到刻度。 DataTable.Rows[i]["日期"]= DateTime.Now; string aa =Convert.ToDateTime(DataTable.Rows[i]["日期"]).ToString(); string bb = Convert.ToDateTime(DataTable.Rows[i][...