private List <TEntity> MapToEntities(DataTable dataTable) { if (dataTable.Rows.Count == 0) { return(new List <TEntity>()); } var options = new PropertyMapBuilder <TEntity>(); MappingBuilder(options); return(ReflectionUtility.DataTableToList(dataTable, options)); }
public static List <TEntity> DataTableToList <TEntity>(DataTable dataTable, PropertyMapBuilder <TEntity> builder) { var targetList = dataTable.AsEnumerable().Select(dataRow => { TEntity entity = Activator.CreateInstance <TEntity>(); foreach (PropertyMetadata <TEntity, object> propertyMetadata in builder.PropertyMap.PropertyMetadataCollection.Where(pm => !pm.IsIgnore)) { var memberSelectorExpression = GetMemberExpression(propertyMetadata.Selector); if (memberSelectorExpression != null) { var property = memberSelectorExpression.Member as PropertyInfo; if (property != null) { if (string.IsNullOrEmpty(propertyMetadata.MapFrom)) { throw new InvalidOperationException("MapFrom was not set"); } if (!dataRow.Table.Columns.Contains(propertyMetadata.MapFrom)) { throw new InvalidOperationException($"Projection mapping is setup to anticipate the result containing a column named '{propertyMetadata.MapFrom}' which was not found"); } property.SetValue(entity, dataRow[propertyMetadata.MapFrom], null); } } } return(entity); }).ToList(); return(targetList); }
private PropertyMap BuildMap <T, TOut>(Expression <Func <T, TOut> > expression) { return((PropertyMap)PropertyMapBuilder.BuildMap(expression)); }