Example #1
0
        public IList <T> ToObjects <T>(DataRow[] dataRows, IDataTypeConverter dataTypeConverter, ExtendedPropertyInfo[] mappings, DataTableParserSettings settings)
        {
            Guard.ArgumentNotNull(dataRows);
            Guard.ArgumentNotNull(dataTypeConverter);
            Guard.ArgumentNotNull(mappings);
            Guard.ArgumentNotNull(settings);

            List <T> objectList      = new List <T>(capacity: dataRows.Length);
            var      dbNullConverter = new DbNullConverter(settings);

            IEnumerable <DelegateColumnMapping <T> > delegates = GetDelegatesForType <T>(mappings);

            for (int rowIndex = 0; rowIndex < dataRows.Length; rowIndex++)
            {
                T returnObject = ObjectInstantiator <T> .CreateNew();

                foreach (var setterDelegate in delegates)
                {
                    object value = dataTypeConverter.FieldToObject(dataRows[rowIndex][setterDelegate.ExtendedPropertyInfo.ColumnIndex], setterDelegate.ExtendedPropertyInfo.PropertyInfo.PropertyType, settings, dbNullConverter);

                    setterDelegate.SetterDelegate(returnObject, value);
                }

                objectList.Add(returnObject);
            }

            return(objectList);
        }
        public IList <T> ToObjects <T>(DataRow[] dataRows, IDataTypeConverter dataTypeConverter, ExtendedPropertyInfo[] mappings, DataTableParserSettings settings)
        {
            Guard.ArgumentNotNull(dataRows);
            Guard.ArgumentNotNull(dataTypeConverter);
            Guard.ArgumentNotNull(mappings);
            Guard.ArgumentNotNull(settings);

            ConcurrentBag <T> objectList = new ConcurrentBag <T>();
            var dbNullConverter          = new DbNullConverter(settings);

            Parallel.For(0, dataRows.Length, (rowIndex) =>
            {
                T returnObject = ObjectInstantiator <T> .CreateNew();

                foreach (var mapping in mappings)
                {
                    object value = dataTypeConverter.FieldToObject(dataRows[rowIndex][mapping.ColumnIndex], mapping.PropertyInfo.PropertyType, settings, dbNullConverter);
                    mapping.PropertyInfo.SetValue(returnObject, value);
                }

                objectList.Add(returnObject);
            });

            return(objectList.ToList());
        }
 public object FieldToObject(object field, Type type, DataTableParserSettings settings, DbNullConverter dbNullConverter)
 {
     if (type.IsValueType)
     {
         return(Activator.CreateInstance(type));
     }
     return(null);
 }