1
/*
例子:導入 名稱,年份,每月的銷量
存入數據庫時:名稱-年-月-銷量
行轉列
參數說明:
匿名類型<T> 第二個參數:前2列不動,第三個參數:傳入月份的列名
返回 Dictionary<int, object> 類型
剩下的就是類型轉換
注: 自己應用的時候請根據實際情況做好測試
*/
static void Main(string[] args)
2 {
3
4 var ceshi = new List<CeshiRowToCol>(){
5 new CeshiRowToCol(){ Type="紅細胞", Year =2020,One=10,Two=20,Three=30,Four=40 },
6 new CeshiRowToCol(){Type="紅細胞",Year=2021,One=12,Two=22,Three=32,Four=42 },
7 new CeshiRowToCol(){Type="紅細胞",Year=2022,One=13,Two=23,Three=33,Four=43 },
8 };
9 string Month = string.Empty;
10 var listData = RowToCol<CeshiRowToCol>(ceshi, 2, Month);
11 }
12
13
14
15 private static Dictionary<int,object> RowToCol<T>(List<T> lists, int Columns, string Month)
16 {
17 //提取不變的列的列名
18 Dictionary<int, string> dicCol = new Dictionary<int, string>();
19 int i = 0;
20 foreach (var col in lists.FirstOrDefault().GetType().GetProperties())
21 {
22 if (i < Columns)
23 {
24 var col1 = col.Name;
25 dicCol.Add(i++, col1);
26 }
27 }
28 dicCol.Add(i++, "Month");
29
30 //返回實體
31 int z = 0;
32 Dictionary<int, object> obj = new Dictionary<int, object>();//字典
33 foreach (var row in lists)
34 {
35 foreach (var col in row.GetType().GetProperties())
36 {
37 var Type = row.GetType().GetProperty(dicCol[0]).GetValue(row);
38 var Year = row.GetType().GetProperty(dicCol[1]).GetValue(row);
39 var num = new object();
40 if (col.Name != dicCol[0] && col.Name != dicCol[1])
41 {
42 Month = col.Name;
43 num = row.GetType().GetProperty(col.Name).GetValue(row);
44 obj.Add(z++, new { Type, Year, Month, num });
45 }
46
47 }
48 }
49 return obj;
50 }
結果集: