反射在ADO.NET中的运用(你还在每个项目中循环遍历DataTable吗)

图片有点大哈,但大更能说明问题。您是不是每个项目都在重复的做图片中的事情-----循环把数据库中返回的表转化为实体对象。是不是每次都在抱怨这样的重复工作。字段越多抱怨越多!不用抱怨了。当你看到这篇文章的时候您的春天就到了,我们可以写一个通用的读取类来为我们转化。

代码实现

 

        static List<T> ConvertDataTalbeToObject<T>(DataTable dt)

        {

            List<T> lt = new List<T>();

 

            if (dt == null)

                return lt;

 

            Assembly ass = Assembly.LoadFile(Path.GetFullPath("通用转对象.exe"));//加载程序集

            Type type = typeof(T);//获取类型

            foreach (DataRow dr in dt.Rows)

            {

                object o = ass.CreateInstance(type.ToString());//实例化一个实例

                PropertyInfo[] propertyInfo = type.GetProperties();//获取该类的所有属性

                foreach (PropertyInfo p in propertyInfo)

                {

                    if (p.PropertyType.Name == "Int32")

                        p.SetValue(o, (dr[p.Name] != null)?(Convert.ToInt32(dr[p.Name])):(Int32.MinValue));

                    else if (p.PropertyType.Name == "Guid")

                        p.SetValue(o, new Guid( dr[p.Name].ToString()));

                    else if (p.PropertyType.Name == "Boolean")

                        p.SetValue(o, Convert.ToBoolean(dr[p.Name].ToString()));

                    else

                        p.SetValue(o, dr[p.Name].ToString());

                }

                lt.Add((T)o);

            }

            return lt;

        }

有什么错误的地方和不足之处希望大家指出,您的宝贵意见是我写下去的动力!

 

posted @   Smart_Coder  阅读(764)  评论(7编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示