public IEnumerable <T> Execute(IEnumerable <object> input) { using (var conn = _connectionProvider()) { conn.Open(); var cmd = conn.CreateCommand(); using (cmd) { cmd.CommandText = _query; cmd.CommandType = CommandType.Text; using (var rdr = cmd.ExecuteReader()) { while (rdr.Read()) { var instance = CreateInstance(); for (var i = 0; i < rdr.FieldCount; i++) { var value = rdr.IsDBNull(i) ? null : rdr[i]; SetterDelegateCache <T> .Write(i, instance, value); } yield return(instance); } } } } }
/// <summary> /// Creates a new object instance from a data row /// </summary> /// <typeparam name="T">The type of object to create</typeparam> /// <param name="row">DataRow containing values</param> /// <param name="constructor">Method used to create a new instance.</param> /// <returns>A new instance of <typeparamref name="T"/> filled with values from <paramref name="row"/>.</returns> public static T ToInstance <T>(this DataRow row, Func <T> constructor) { var retval = constructor(); foreach (var propertyName in SetterDelegateCache <T> .WritablePropertyNames) { var value = row.IsNull(propertyName) ? null : row[propertyName]; SetterDelegateCache <T> .Write(propertyName, retval, value); } return(retval); }