public static class tableUtility
{
public static object ChangeType(object obj, Type conversionType)
{
return ChangeType(obj, conversionType, System.Threading.Thread.CurrentThread.CurrentCulture);
}
public static object ChangeType(object obj, Type conversionType, IFormatProvider provider)
{
Type nullableType = Nullable.GetUnderlyingType(conversionType);
if (nullableType != null)
{
if (obj == null)
{
return null;
}
return Convert.ChangeType(obj, nullableType, provider);
}
if (typeof(Enum).IsAssignableFrom(conversionType))
{
return Enum.Parse(conversionType, obj.ToString());
}
return Convert.ChangeType(obj, conversionType, provider);
}
/// <summary>
/// 利用反射将Datatable转换为List<T>对象
/// </summary>
/// <typeparam name="T">集合</typeparam>
/// <param name="dt"> datatable对象</param>
/// <returns></returns>
public static List<T> ToDataList<T>(DataRow[] dt, string[] bracketcolumn) where T : new()
{
//定义集合
List<T> ts = new List<T>();
//遍历dataTable中的数据行
foreach (DataRow dr in dt)
{
T t = new T();
//遍历dataTable列集合
foreach (var c in bracketcolumn)
{
//读取值
object value = dr[c.ToString()];
//判断是否存在
if (value != DBNull.Value)
{
//获取指定值的属性
var p = t.GetType().GetProperty(c.ToString());
if (p != null)
{
//对象赋值
p.SetValue(t, ChangeType(value, p.PropertyType), null);
}
}
}
//对象添加到泛型集合中
ts.Add(t);
}
return ts;
}
}
调用方法:
List<T> result = tableUtility.ToDataList<T>(dt, bracketcolumn);