转换list数据为table 和 转换table为list的两个方法
作者:互联网
/// <summary> /// Convert list to Data Table /// </summary> /// <typeparam name="T">Target Class</typeparam> /// <param name="varlist">list you want to convert it to Data Table</param> /// <returns>Data Table That Represent List data</returns> public static DataTable ToADOTable<T>(this IEnumerable<T> varlist) { DataTable toReturn = new DataTable(); // Could add a check to verify that there is an element 0 T TopRec = varlist.ElementAtOrDefault(0); if (TopRec == null) return toReturn; // Use reflection to get property names, to create table // column names PropertyInfo[] oProps = ((Type)TopRec.GetType()).GetProperties(); foreach (PropertyInfo pi in oProps) { Type pt = pi.PropertyType; if (pt.IsGenericType && pt.GetGenericTypeDefinition() == typeof(Nullable<>)) pt = Nullable.GetUnderlyingType(pt); toReturn.Columns.Add(pi.Name, pt); } foreach (T rec in varlist) { DataRow dr = toReturn.NewRow(); foreach (PropertyInfo pi in oProps) { object o = pi.GetValue(rec, null); if (o == null) dr[pi.Name] = DBNull.Value; else dr[pi.Name] = o; } toReturn.Rows.Add(dr); } return toReturn; }
/// <summary> /// Convert Data Table To List of Type T /// </summary> /// <typeparam name="T">Target Class to convert data table to List of T </typeparam> /// <param name="datatable">Data Table you want to convert it</param> /// <returns>List of Target Class</returns> public static List<T> ToList<T>(this DataTable datatable) where T : new() { List<T> Temp = new List<T>(); try { List<string> columnsNames = new List<string>(); foreach (DataColumn DataColumn in datatable.Columns) columnsNames.Add(DataColumn.ColumnName); Temp = datatable.AsEnumerable().ToList().ConvertAll<T>(row => getObject<T>(row, columnsNames)); return Temp; } catch { return Temp; } } public static T getObject<T>(DataRow row, List<string> columnsName) where T : new() { T obj = new T(); try { string columnname = ""; string value = ""; PropertyInfo[] Properties; Properties = typeof(T).GetProperties(); foreach (PropertyInfo objProperty in Properties) { columnname = columnsName.Find(name => name.ToLower() == objProperty.Name.ToLower()); if (!string.IsNullOrEmpty(columnname)) { value = row[columnname].ToString(); if (!string.IsNullOrEmpty(value)) { if (Nullable.GetUnderlyingType(objProperty.PropertyType) != null) { value = row[columnname].ToString().Replace("$", "").Replace(",", ""); objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(Nullable.GetUnderlyingType(objProperty.PropertyType).ToString())), null); } else { value = row[columnname].ToString().Replace("%", ""); if (!(value == "System.Byte[]")) objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(objProperty.PropertyType.ToString())), null); else objProperty.SetValue(obj, row[columnname], null); } } } } return obj; } catch { return obj; } }
标签:转换,List,list,value,columnname,objProperty,table,pi,row 来源: https://www.cnblogs.com/kelenote/p/15978953.html