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