首先谢谢各位来捧场。 说一下我的需求: 大概是通过反射分组来求合。 在数据库中的结构是这样的: ProduceName: 存储过程名称 ParamenName:参数名 ParameType:参数类型(比如int,varchr之类的) 我要写一个通用的方法: 首先从数据库中取到存储过程名称,ParamenName,ParameType , 执行并得到一个DataTable, 问题来了, 如果DataTable中的其中一列,是int或float之类的话(可以根据存在数据库中的ParameType知道是哪种类型)。则要新生成一列,根据这列求合。比如产品数量这列dr["ProductCount"]是int的话,则要新增一列,根据这列求合,再将求合出来的值赋予新增列的ProductCount字段, 不知道我这样说大家明白不。
首先谢谢各位来捧场。 说一下我的需求: 大概是通过反射分组来求合。 在数据库中的结构是这样的: ProduceName: 存储过程名称 ParamenName:参数名 ParameType:参数类型(比如int,varchr之类的) 我要写一个通用的方法: 首先从数据库中取到存储过程名称,ParamenName,ParameType , 执行并得到一个DataTable, 问题来了, 如果DataTable中的其中一列,是int或float之类的话(可以根据存在数据库中的ParameType知道是哪种类型)。则要新生成一列,根据这列求合。比如产品数量这列dr["ProductCount"]是int的话,则要新增一列,根据这列求合,再将求合出来的值赋予新增列的ProductCount字段, 不知道我这样说大家明白不。
public static IList <T> ConvertToModel(DataTable dt)
{
IList <T> lst= 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;
if (dt.Columns.Contains(tempName))
{
if (!pi.CanWrite) continue;
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
lst.Add(t);
}
return ts;
}
}