/// 利用反射将Datatable转换为List<T>对象
/// </summary>
/// <typeparam name="T">集合</typeparam>
/// <param name="dt"> datatable对象</param>
/// <returns></returns>
public
List<T> DataTableToList<T>(DataTable dt)
where
T :
new
()
{
//定义集合
List<T> ts =
new
List<T>();
//定义一个临时变量
string
tempName =
string
.Empty;
//遍历dataTable中的数据行
foreach
(DataRow dr
in
dt.Rows)
{
T t =
new
T();
//获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
//遍历该对象的所有属性
foreach
(PropertyInfo pi
in
propertys)
{
tempName = pi.Name;
//将属性名称赋值给临时变量
//检查datatable是否包含此列(列名==对象的属性名)
if
(dt.Columns.Contains(tempName))
{
//取值
object
value = dr[tempName];
//如果非空,则赋给对象的属性
if
(value != DBNull.Value)
{
//这里添加判断的原因:比如double转folat不能隐式转换,而枚举类型又不能使用Convert.ChangeType
if
(pi.PropertyType.IsEnum)
{
pi.SetValue(t, value,
null
);
}
else
{
//ChangeType属于强转可能存在数据丢失,但是pi.PropertyType是对应你类成员的类型
pi.SetValue(t, Convert.ChangeType(value, pi.PropertyType),
null
);
}
}
}
}
//对象添加到泛型集合中
ts.Add(t);
}
return
ts;
}
|
|
利用反射把Datatable转换成List
猜你喜欢
转载自www.cnblogs.com/yinjinli/p/11971362.html
今日推荐
周排行