反射在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;
}
有什么错误的地方和不足之处希望大家指出,您的宝贵意见是我写下去的动力!