DataTable与List相互转换
.NET后台数据处理,从数据库中的捞出的数据格式一般是List和DataTable的格式.现在将两种格式相互转换的心得记录下来以便以后查找(直接上代码).
public class ConvertHelper<T> where T : new()
{
//将DataTable转换为List
public static List<T> ConvertToList(DataTable dt)
{
// 定义集合
var ls = new List<T>();
// 获得此模型的类型
Type type = typeof(T);
//定义一个临时变量
string tempName = "";
//遍历DT数据行
foreach (DataRow dr in dt.Rows)
{
T t = new T();
//获得此模型的公共属性
PropertyInfo[] pros = t.GetType().GetProperties();
//遍历公共属性
foreach (PropertyInfo p in pros)
{
////属性名称传给临时变量
//tempName = p.Name;
////检查DataTable是否包含此列(列名==对象的属性名)
//if (dt.Columns.Contains(tempName))
//{
// // 判断此属性是否有Setter
// if (!p.CanWrite) continue;//该属性不可写,直接跳出
// //取出该行该列的值
// //object value = dr[tempName];
// //如果非空,则赋给对象的属性
// //if (value != DBNull.Value)
// //p.SetValue(t, value, null);
//}
if (p.CanWrite && dt.Columns.Contains(p.Name) && dr[p.Name] != DBNull.Value)
p.SetValue(t, dr[p.Name], null);
}
ls.Add(t);
}
return ls;
}
//获取List类型属性
public static List<PropertyInfo> GetPropertyInfo(List<T> tList)
{
T t = new T();
PropertyInfo[] tpro = t.GetType().GetProperties();
return tpro.ToList();
}
//将list转换为DataTable
public static DataTable ConvertToDataTable(List<T> list)
{
DataTable dt = new DataTable();//初始化DT
//var arrPro = GetPropertyInfo(list);
T t = new T();
var arrPro = t.GetType().GetProperties();
foreach (PropertyInfo pro in arrPro)
{
if (pro.CanWrite)//如果属性可以写入
dt.Columns.Add(pro.Name, pro.Name.GetType());//DT的添加列
}
for (var i = 0; i < list.Count(); i++)
{
DataRow newDr = dt.NewRow();
foreach (PropertyInfo p in arrPro)
{
if (p.CanWrite)
newDr[p.Name] = p.GetValue(list[i]);//新行的列赋值
}
dt.Rows.Add(newDr);
}
return dt;
}
}