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);
        }
Ejemplo n.º 3
0
 private PropertyMap BuildMap <T, TOut>(Expression <Func <T, TOut> > expression)
 {
     return((PropertyMap)PropertyMapBuilder.BuildMap(expression));
 }