#region SqlDataReader 转实体
/// <summary>
/// DataTable转化为实体类集合
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> ConvertTolist<T>(DataTable dt)where T:class
{
//定义泛型集合
List<T> ts = new List<T>();
if (dt.Rows.Count < 1)
{
return ts;
}
//获得此模型的类型
Type type = typeof(T);
//定义一个临时变量
string tempName = string.Empty;
//遍历Datable中的所有行
foreach (DataRow dr in dt.Rows)
{
T t = (T)Activator.CreateInstance(type); ;
//获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
//遍历该对象的所有属性
foreach (PropertyInfo items in propertys)
{
//将属性名称赋值给临时变量
tempName = items.Name;
//判断Datable中是否包含此列(列名=对象的属性名)
if (dt.Columns.Contains(tempName))
{
//判断此属性是否有setter
if (!items.CanWrite) continue;//该属性不可写,跳出
//取值
object value = dr[tempName];
//如果非空,给对象属性赋值
if (value != DBNull.Value)
{
var a = Convert.ChangeType(value, items.PropertyType);
items.SetValue(t, a, null);
}
}
}
//添加到泛型集合中
ts.Add(t);
}
return ts;
}
#endregion