c# DataTable行轉列


/// <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;
        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM