c# 将datatable的每一行转换为一个对象

本文介绍了如何在C#中将DataTable的每一行转换为自定义对象,要求DataTable的列名与对象属性名对应,同时也探讨了不同列名时的转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        /// <summary>
        /// DataTable转List
        /// </summary>
        /// <param name="dt">要转换的Datatable</param>
        /// <param name="className">转换后的对象的类名</param>
        /// <returns>对象列表</returns>
        private List<object> DataTableToList(DataTable dt,string className)
        {

            if (dt == null)
                return null;
            List<object> list = new List<object>();

            //遍历DataTable中所有的数据行
            foreach (DataRow dr in dt.Rows)
            {
                //类所在的namespace
                Type type = Type.GetType("YourNamespace." + className);
                var t = Activator.CreateInstance(type);

                PropertyInfo[] propertys = t.GetType().GetProperties();
                foreach (PropertyInfo pro in propertys)
                {
                    //检查DataTable是否包含此列(列名==对象的属性名)  
                    if (dt.Columns.Contains(pro.Name))
                    {
                        object value = dr[pro.Name];

                        Type tmpType = Nullable.GetUnderlyingType(pro.PropertyType) ?? pro.PropertyType;
                        object safeValue = (value == null) ? null : Convert.ChangeType(value, tmpType);

                        //如果非空,则赋给对象的属性  PropertyInfo
                        if (safeValue != DBNull.Value)
                        {
                            pro.SetValue(t, safeValue, null);
                        }
                    }
                }
                //对象添加到泛型集合中
                list.Add(t);
            }
            return list;
        }

注意:这里需要datatable的columns名和类的属性名一样,当然,稍加修改,你也可以设置为不一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值