/// <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; } }