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

示例:

复制代码
        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;
        }
    }
复制代码

 

posted @   James·wang  阅读(393)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2020-06-09 Vue 安装“npm install -g @vue/cli”发生npm WARN deprecated request@2.88.2: request has been deprecated,的错误解决方法
2013-06-09 MVC中使用Cookie计算登录次数注意事项!
点击右上角即可分享
微信分享提示