• List转DataTable


    一、简单讲解

    结合图片简单讲解DataTable几个比较重要的属性以便于更好的理解代码。

         

    Table:表示一个表;
    Rows:表行的集合;
    Columns:表列的集合;

    单元格是表格中行与列的交叉部分;

    Rows[index]:index代表下标,从0开始;可以定位到第几行。

    比如

    Rows[0],代表第一行;

    Rows[1],代表第二行;

    Columns[index]:index代表下标,从0开始;可以定位到第几列。

    Columns[0],代表第一列;

    Columns[1],代表第二列;

    想要获取到第几行第几列的数据我们有两种方法:

    1) rows[行数][列数];

    2) rows[行数][列名];

    按照上图一的标记

    想要获取标记为①的单元格值103

    var value = rows[3][3]; 第4行第4列单元格值:

    var value= rows[3]["MemberId"];第4行列名为MemberId的单元格值:

    想要获取标记为②的单元格值CS202206271430001:

    var value = rows[1][7]; 第2行第8列单元格值:

    var value= rows[1]["UsageBillNo"];第2行列名为UsageBillNo的单元格值: 

    二、List转DataTable 代码如下 

            /// <summary>
            /// 测试入口
            /// 模拟数据
            /// </summary>
            /// <returns></returns>
            public DataTable ListToDataTableTest() {
    
                 var couponUsageList = new List<CrmCouponTestDto>() {
                     new CrmCouponTestDto {
                         Id=1,
                         CouponCode="test001",
                         CouponId = 1,
                         MemberId=100,
                         IssueTime=Convert.ToDateTime("2022-06-27 14:00:00"),
                         UsageTime=Convert.ToDateTime("3000-12-31 00:00:00"),
                         UsageShopId=0,
                         UsageBillNo="",
                         EffectiveStart=Convert.ToDateTime("2022-06-27 14:00:00"),
                         EffectiveEnd=Convert.ToDateTime("2023-06-27 14:00:00"),
                         Status=0
                     },
                     new CrmCouponTestDto {
                         Id=2,
                         CouponCode="test002",
                         CouponId = 1,
                           MemberId=101,
                         IssueTime=Convert.ToDateTime("2022-06-27 14:00:00"),
                         UsageTime=Convert.ToDateTime("2022-06-27 14:30:00"),
                         UsageShopId=2,
                         UsageBillNo="CS202206271430001",
                         EffectiveStart=Convert.ToDateTime("2022-06-27 14:00:00"),
                         EffectiveEnd=Convert.ToDateTime("2023-06-27 14:00:00"),
                         Status=1
                     },
                      new CrmCouponTestDto {
                         Id=3,
                         CouponCode="test003",
                         CouponId = 1,
                         MemberId=102,
                         IssueTime=Convert.ToDateTime("2022-06-27 14:00:00"),
                         UsageTime=Convert.ToDateTime("3000-12-31 00:00:00"),
                         UsageShopId=0,
                         UsageBillNo="",
                         EffectiveStart=Convert.ToDateTime("2022-06-27 14:00:00"),
                         EffectiveEnd=Convert.ToDateTime("2023-06-27 14:00:00"),
                         Status=0
                     },
                        new CrmCouponTestDto {
                         Id=4,
                         CouponCode="test004",
                         CouponId = 1,
                         MemberId=103,
                         IssueTime=Convert.ToDateTime("2022-06-27 14:00:00"),
                         UsageTime=Convert.ToDateTime("3000-12-31 00:00:00"),
                         UsageShopId=0,
                         UsageBillNo="",
                         EffectiveStart=Convert.ToDateTime("2022-06-27 14:00:00"),
                         EffectiveEnd=Convert.ToDateTime("2023-06-27 14:00:00"),
                         Status=0
                     }
                 };
                 return ListToDataTable<CrmCouponTestDto>(couponUsageList);
    
            }
    
            /// <summary>
            /// 将List转化为DataTable核心方法
            /// </summary>
            /// <returns></returns>
            public DataTable ListToDataTable<T>(List<T> data)
            {
                #region 创建一个DataTable,以实体名称作为DataTable名称
    
                var tableName = typeof(T).Name;
                DataTable dt = new DataTable
                {
                    TableName = tableName
                };
    
                #endregion
    
                #region 拿取列名,以实体的属性名作为列名       
                                   
                var properties = typeof(T).GetProperties();
                foreach (var item in properties)
                {
                    var curFileName = item.Name;
                    dt.Columns.Add(curFileName);
                }
    
                #endregion
    
                #region 列赋值
                foreach (var item in data)
                {
                    DataRow dr = dt.NewRow();
                    var columns = dt.Columns;
    
                    var curPropertyList=item.GetType().GetProperties();
                    foreach (var p in curPropertyList)
                    {  
                        var name = p.Name;                                
                        var curValue = p.GetValue(item);
                     
                        int i = columns.IndexOf(name);
                        dr[i] = curValue;
                    }
    
                    dt.Rows.Add(dr);
                }
    
                #endregion  
    
                return dt;
            }
    
    
      /// <summary>
        /// 实体
        /// </summary>
        public  class CrmCouponTestDto
        {
            /// <summary>
            /// ID
            /// </summary>
            public long  Id { get; set; }
    
            /// <summary>
            /// 卡券号
            /// </summary>     
            public string CouponCode { get; set; }
    
            /// <summary>
            /// 卡券ID
            /// </summary>
            public int CouponId { get; set; }
    
            /// <summary>
            /// 会员ID
            /// </summary>
            public int MemberId { get; set; }
    
            /// <summary>
            /// 发放时间
            /// </summary>   
            public DateTime IssueTime { get; set; }
    
            /// <summary>
            /// 使用时间
            /// </summary>      
            public DateTime UsageTime { get; set; }
    
            /// <summary>
            /// 使用店铺ID
            /// </summary>      
    
            public int UsageShopId { get; set; }
    
            /// <summary>
            /// 使用单号
            /// </summary>      
            public string UsageBillNo { get; set; }
    
            /// <summary>
            /// 有效开始时间
            /// </summary>      
            public DateTime EffectiveStart { get; set; }
    
            /// <summary>
            /// 有效结束时间
            /// </summary>      
            public DateTime EffectiveEnd { get; set; }
    
            /// <summary>
            /// 状态
            /// CouponStatus 卡券状态:
            /// -1:未领用
            /// 0:未使用
            /// 1:已使用
            /// 2:已过期
            ///3:已作废
            ///4:转赠中
            /// </summary>
        
            public Int16 Status { get; set; }
        }
    View Code

      

  • 相关阅读:
    JS的数据类型
    JS瀑布流布局模式(2)
    Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)——无非是在传统遍历过程中修改叶子结点加入后继结点信息(传统是stack记录),然后再删除恢复
    leetcode 538. Convert BST to Greater Tree
    python 闭包变量不允许write,要使用nonlocal
    机器学习中,有哪些特征选择的工程方法?
    python利用决策树进行特征选择
    机器学习 不均衡数据的处理方法
    python dns server开源列表 TODO
    python dig trace 功能实现——通过Querying name server IP来判定是否为dns tunnel
  • 原文地址:https://www.cnblogs.com/yaoxiaodan/p/16415839.html
Copyright © 2020-2023  润新知