/// <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); }