DataTable到范型转换
/// <summary>
/// 适合于实体类和DataTable对应的情况
/// </summary>
public class ConvertExtend
{
//将泛型类转换成DataTable
public static DataTable ToDataTable<T>(List<T> entitys)
{
DataTable dtResult = new DataTable();
if (entitys == null || entitys.Count < 1)
{
throw new Exception("需转换的集合为空");
}
Type entityType = entitys[0].GetType();
List<PropertyInfo> propertyInfoList = entityType.GetProperties().ToList<PropertyInfo>();
foreach (PropertyInfo item in propertyInfoList)
{
dtResult.Columns.Add(new DataColumn(item.Name, item.PropertyType));
}
foreach (T entity in entitys)
{
DataRow dr = dtResult.NewRow();
foreach (PropertyInfo item in propertyInfoList)
{
dr[item.Name] = item.GetValue(entity, null);
}
dtResult.Rows.Add(dr);
}
return dtResult;
}
//将泛型类转换成DataTable
public static IList<T> ToList<T>(DataTable dt)
{
List<T> list = new List<T>();
//T model = default(T);
for (int iRow = 0; iRow < dt.Rows.Count; iRow++)
{
DataRow dr = dt.Rows[iRow];
T t = (T)System.Activator.CreateInstance(typeof(T));
List<PropertyInfo> listPropertyInfo = t.GetType().GetProperties().ToList<PropertyInfo>();
foreach (PropertyInfo item in listPropertyInfo)
{
if (dr[item.Name] != DBNull.Value)
{
item.SetValue(t, dr[item.Name], null);
}
else
{
item.SetValue(t, (string)null, null);
}
}
list.Add(t);
}
return list;
}
}