zoukankan      html  css  js  c++  java
  • C# List 行转列

     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         }
    结果集:



  • 相关阅读:
    第八章 路由器交换机及其操作系统的介绍
    k-Tree DP计数
    Drop Voicing 最长升序
    高精度
    1196D2
    C
    POJ 3974 马拉车
    2020.8.1第二十六天
    2020.7.31第二十五天
    每日日报
  • 原文地址:https://www.cnblogs.com/pushYYL/p/12784772.html
Copyright © 2011-2022 走看看