/// <summary>
/// 实体转表
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="list">对象</param>
/// <returns></returns>
public static DataTable ToDataTable<T>(this IList<T> list)
{
Type elementType = typeof(T);
var t = new DataTable();
elementType.GetProperties().ToList().ForEach(propInfo => t.Columns.Add(propInfo.Name, Nullable.GetUnderlyingType(propInfo.PropertyType) ?? propInfo.PropertyType));
foreach (T item in list)
{
var row = t.NewRow();
elementType.GetProperties().ToList().ForEach(propInfo => row[propInfo.Name] = propInfo.GetValue(item, null) ?? DBNull.Value);
t.Rows.Add(row);
}
return t;
}
/// <summary>
/// 表转为实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="table"></param>
/// <returns></returns>
public static List<T> ToModel<T>(this DataTable table) where T : class, new()
{
var list = new List<T>();
foreach (DataRow dr in table.Rows)
{
var model = new T();
foreach (DataColumn dc in dr.Table.Columns)
{
object drValue = dr[dc.ColumnName];
var pi = model.GetType().GetProperties().Where(x => x.Name.ToLower() == dc.ColumnName.ToLower()).FirstOrDefault();
Type type = pi.PropertyType;
if (pi.PropertyType.FullName.Contains("System.Nullable"))
{
type = Type.GetType("System." + pi.PropertyType.FullName.Split(',')[0].Split('.')[2]);
}
if (pi != null && pi.CanWrite && (drValue != null && !Convert.IsDBNull(drValue)))
{
try
{
drValue = Convert.ChangeType(drValue, type);
pi.SetValue(model, drValue, null);
}
catch (Exception)
{
}
}
}
list.Add(model);
}
return list;
}