ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# 构建一个DataTable数据集并把它转化为相应的类集合

2022-06-09 22:39:18  阅读:213  来源: 互联网

标签:c# DataColumn DataTable dtz 构建 new dr public


示例:

        public void test()
        {
            DataTable dtz = new DataTable();
            //添加Table中的列
            DataColumn dc1 = new DataColumn("UserName", Type.GetType("System.String"));
            DataColumn dc2 = new DataColumn("IDType", Type.GetType("System.String"));
            DataColumn dc3 = new DataColumn("IDCardNo", Type.GetType("System.String"));
            DataColumn dc4 = new DataColumn("SalaryAmount", Type.GetType("System.String"));
            dtz.Columns.Add(dc1);
            dtz.Columns.Add(dc2);
            dtz.Columns.Add(dc3);
            dtz.Columns.Add(dc4);
            //以上代码完成了DataTable的构架,但是里面是没有任何数据的
            for (int i = 0; i < 10; i++)
            {
                DataRow dr = dtz.NewRow();
                dr["UserName"] = "James"+i;
                dr["IDType"] = "1";
                dr["IDCardNo"] = "34212419800606" + i;
                dr["SalaryAmount"] = "5000";
                dtz.Rows.Add(dr);
            }
            var excelList = ModelConvertHelper<HRImportSalaryExcel>.ConvertToModel(dtz);

        }

定义一个类:

public class HRImportSalaryExcel
    {
        /// <summary>
        /// 姓名    
        /// </summary>
        public string UserName { get; set; }
        /// <summary>
        /// 证件类型   1- 身份证;2-护照;
        /// </summary>
        public string IDType { get; set; }
        /// <summary>
        /// 证件号码    
        /// </summary>
        public string IDCardNo { get; set; }
        /// <summary>
        /// 应发工资金额 
        /// </summary>
        public string SalaryAmount { get; set; }
}

DataTable转换为List

/// <summary>    
    /// 实体转换辅助类 DataTable转换到List  
    /// 使用方式
    ///把DataTable转换为IList<UserInfo>  
    ///IList<UserInfo> users = ModelConvertHelper<UserInfo>.ConvertToModel(dt);
    /// </summary>    
    public class ModelConvertHelper<T> where T : new()
    {
        public static List<T> ConvertToModel(DataTable dt)
        {
            // 定义集合    
            List<T> ts = new List<T>();

            // 获得此模型的类型   
            Type type = typeof(T);
            string tempName = "";

            foreach (DataRow dr in dt.Rows)
            {
                T t = new T();
                // 获得此模型的公共属性      
                PropertyInfo[] propertys = t.GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    tempName = pi.Name;  // 检查DataTable是否包含此列   
                    if (dt.Columns.Contains(tempName))
                    {
                        // 判断此属性是否有Setter      
                        if (!pi.CanWrite) continue;
                        object value = dr[tempName];
                        if (value != DBNull.Value)
                            pi.SetValue(t, value, null);
                    }
                }
                ts.Add(t);
            }
            return ts;
        }
    }

 

标签:c#,DataColumn,DataTable,dtz,构建,new,dr,public
来源: https://www.cnblogs.com/firstcsharp/p/16361412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有