public static List <T> toList <T>(this System.Data.DataTable dt, DataFieldMappings df) { try { // const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance; var columnNames = dt.Columns.Cast <DataColumn>() .Select(c => c.ColumnName) .ToList(); var ints = Activator.CreateInstance <T>(); var objectProperties = GetAllProperties(typeof(T)); var targetList = dt.AsEnumerable().Select(dataRow => { var instanceOfT = Activator.CreateInstance <T>(); // foreach (var properties in objectProperties.Where(properties => columnNames.Contains(properties.Name) && dataRow[properties.Name] != DBNull.Value)) foreach (DataFieldMapping d in df.GetMapping()) { if (dt.Columns.Contains(d.DataField)) { var property = objectProperties.Where( properties => properties.Name == d.MemberField && dataRow[d.DataField] != DBNull.Value ); if (property.Count() > 0) { var pt = property.FirstOrDefault(); pt.SetValue(instanceOfT, dataRow[d.DataField], null); } } } return(instanceOfT); }).ToList(); return(targetList.ToList <T>()); } catch (Exception e) { throw new Exception(e.Message, e.InnerException); } }
public static List <T> toList <T>(this System.Data.DataTable dt, DataFieldMappings df, Func <T, T> Bind, Func <string, string, dynamic> format) { try { // const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance; var columnNames = dt.Columns.Cast <DataColumn>() .Select(c => c.ColumnName) .ToList(); var ints = Activator.CreateInstance <T>(); var objectProperties = GetAllProperties(typeof(T)); var targetList = dt.AsEnumerable().Select(dataRow => { var instanceOfT = Activator.CreateInstance <T>(); // foreach (var properties in objectProperties.Where(properties => columnNames.Contains(properties.Name) && dataRow[properties.Name] != DBNull.Value)) foreach (DataFieldMapping d in df.GetMapping()) { if (dt.Columns.Contains(d.DataField)) { var property = objectProperties.Where( properties => properties.Name == d.MemberField && dataRow[d.DataField] != DBNull.Value ); if (property.Count() > 0) { var pt = property.FirstOrDefault(); if (d.IsKey == false) { if (pt.PropertyType.Name == "Boolean") { if (dataRow[d.DataField] == null) { pt.SetValue(instanceOfT, false, null); } else { pt.SetValue(instanceOfT, Convert.ToBoolean(dataRow[d.DataField]), null); } } else { if ((((pt).PropertyType).BaseType).FullName == "System.Enum") { pt.SetValue(instanceOfT, format(d.DataField, dataRow[d.DataField].ToString()), null); } else if ((((pt).PropertyType).BaseType).FullName == "System.ValueType") { pt.SetValue(instanceOfT, Cast(dataRow[d.DataField], (((pt).PropertyType))), null); } else { pt.SetValue(instanceOfT, dataRow[d.DataField], null); } } } else { FieldInfo nameField = pt.GetBackingField(); nameField.SetValue(instanceOfT, dataRow[d.DataField]); } } } } if (Bind is null) { } else { instanceOfT = Bind(instanceOfT); } return(instanceOfT); }).ToList(); return(targetList.ToList <T>()); } catch (Exception e) { throw new Exception(e.Message, e.InnerException); } }