/// <summary>
/// DataRow 转 Obj
/// </summary>
/// <typeparam name="T"> </typeparam>
/// <param name="Dt"></param>
/// <param name="index">行号</param>
/// <returns></returns>
public static T RowToObj<T>(this DataTable Dt ,int index)
{
Type t = typeof(T); // 获取类型
T obj = (T)Activator.CreateInstance(t); //创建对象
PropertyInfo[] ProInfo=t.GetProperties(); //获取所属性
foreach (PropertyInfo p in ProInfo) // 遍列所有属性
{
string pName = p.Name;
if (!Dt.Columns.Contains(pName)) continue; // 如果 table里没有这个属性返回
if (p.PropertyType == typeof(DateTime) && Convert.ToDateTime(Dt.Rows[index][pName]) < Convert.ToDateTime("1753-01-02")) continue; //判断 日期类型
if (Dt.Rows[index][pName] == DBNull.Value) continue; //如果dt的值为空 返回
object pValue = Dt.Rows[index][pName];
Type property_type = p.PropertyType; //获取类型
object value = Convert.ChangeType(obj, property_type); //强制转换类型
p.SetValue(value, pValue);
}
return obj; //返回对象
}
/// <summary>
/// Table 转 List<T>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="Dt"></param>
/// <returns></returns>
public static List<T> TableToObj<T>(this DataTable Dt)
{
List<T> Ls = new List<T>();
for (int i = 0; i < Dt.Rows.Count; i++)
{
T obj = Dt.RowToObj<T>(i); // 调用 dataRow To Obj
Ls.Add(obj);
}
return Ls;
}
使用方式
dt.TableToObj<T>();
dt.RowToObj<T>();