/// <summary>
/// List和DataTable互转
/// </summary>
static class ListUtility
{
/// <summary>
/// 将List转换成DataTable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <returns></returns>
public static DataTable ListToDataTable<T>(this IList<T> data, string strTableName = "")
{
try
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
DataTable dtReturn = new DataTable(strTableName);
for (int i = 0; i < properties.Count; i++)
{
PropertyDescriptor property = properties[i];
dtReturn.Columns.Add(property.Name, property.PropertyType);
}
object[] values = new object[properties.Count];
foreach (T item in data)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = properties[i].GetValue(item);
}
dtReturn.Rows.Add(values);
}
return dtReturn;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 获得集合实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> DataTableToList<T>(DataTable dt)
{
if (dt == null || dt.Rows.Count == 0)
{
return null;
}
List<T> list = new List<T>();
T entity = default(T);
foreach (DataRow dr in dt.Rows)
{
entity = Activator.CreateInstance<T>();
PropertyInfo[] pis = entity.GetType().GetProperties();
foreach (PropertyInfo pi in pis)
{
if (dt.Columns.Contains(pi.Name))
{
if (!pi.CanWrite)
{
continue;
}
if (dr[pi.Name] != DBNull.Value)
{
Type t = pi.PropertyType;
if (t.FullName == "System.Guid")
{
pi.SetValue(entity, dr[pi.Name].ToString(), null);
}
else
{
pi.SetValue(entity, dr[pi.Name], null);
}
}
}
}
list.Add(entity);
}
return list;
}
}