Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T">Class to convert to</typeparam>
        /// <param name="reader">Datareader to convert</param>
        /// <returns></returns>
        /// <remarks></remarks>
        public static T GetAs <T>(this System.Data.IDataReader reader) where T : class
        {
            // Create a new Object
            var newObjectToReturn = Activator.CreateInstance <T>();
            var propertyName      = string.Empty;
            var propertyTypeName  = string.Empty;
            var tableColumnType   = string.Empty;

            try
            {
                // Get all the properties in our Object
                var props = GetCachedProperties <T>();
                // For each property get the data from the reader to the object
                var columnList = reader.GetColumnList();
                foreach (var t in props)
                {
                    propertyName     = t.Name;
                    propertyTypeName = t.PropertyType.Name;
                    if (columnList.Contains(propertyName.ToLowerInvariant()) && reader[t.Name] != DBNull.Value)
                    {
                        tableColumnType = reader[propertyName].GetType().ToString();
                        typeof(T).InvokeMember(propertyName, BindingFlags.SetProperty, null, newObjectToReturn, new[] { reader[propertyName] });
                    }
                }
            }
            catch (MissingMethodException ex)
            {
                if (ex.Message.Contains("Method") && ex.Message.Contains("not found"))
                {
                    throw new MissingMemberException(string.Format("Type '{0}' of column in table matches type '{1}' of property '{2}' in class.", tableColumnType, propertyTypeName, propertyName), ex);
                }
            }
            return(newObjectToReturn);
        }