public IEnumerable <T> Execute <T>(IRequestWithResponse request) { var rows = new List <Dictionary <string, object> >(); using (var command = request.BuildSql()) { connection.Connection.Open(); try { OnRequest(command.CommandText); using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection)) { while (reader.Read()) { var row = new Dictionary <string, object>(); for (int i = 0; i < reader.FieldCount; i++) { row.Add(reader.GetName(i), reader.GetValue(i)); } rows.Add(row); } } } catch (Exception e) { throw e; } finally { connection.Connection.Close(); } } var objects = new List <T>(); foreach (var row in rows) { var obj = Activator.CreateInstance <T>(); foreach (var column in row) { var prop = obj.GetType().GetProperty(column.Key); if (prop == null && typeof(T) == typeof(int)) { obj = (T)column.Value; } else if (prop.PropertyType == typeof(string)) { if (!column.Value.Equals(DBNull.Value)) { prop.SetValue(obj, column.Value.ToString()); } else { prop.SetValue(obj, null); } } else if (prop.PropertyType == typeof(int)) { var tmp = 0; int.TryParse(column.Value.ToString(), out tmp); prop.SetValue(obj, tmp); } else if (prop.PropertyType == typeof(float)) { var tmp = 0f; float.TryParse(column.Value.ToString(), out tmp); prop.SetValue(obj, tmp); } else if (prop.PropertyType == typeof(bool)) { prop.SetValue(obj, column.Value.ToString().Equals("1")); } else if (prop.PropertyType == typeof(XmlDocument)) { var xml = new XmlDocument(); if (!column.Value.Equals(DBNull.Value)) { xml.LoadXml(column.Value.ToString()); } prop.SetValue(obj, xml); } else if (prop.PropertyType == typeof(Guid)) { prop.SetValue(obj, Guid.Parse(column.Value.ToString())); } else if (prop.PropertyType == typeof(DateTime)) { prop.SetValue(obj, DateTime.Parse(column.Value.ToString())); } } objects.Add(obj); } return(objects); }
public IEnumerable <T> Execute <T>(IRequestWithResponse request) { var rows = new List <Dictionary <string, object> >(); using (var command = request.BuildSql()) { connection.Connection.Open(); try { OnRequest(command.CommandText); using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection)) { while (reader.Read()) { var row = new Dictionary <string, object>(); for (int i = 0; i < reader.FieldCount; i++) { row.Add(reader.GetName(i), reader.GetValue(i)); } rows.Add(row); } } } catch (Exception e) { throw e; } finally { connection.Connection.Close(); } } var objects = new List <T>(); foreach (var row in rows) { var obj = Activator.CreateInstance <T>(); foreach (var column in row) { var prop = obj.GetType().GetProperty(column.Key); if (prop == null && typeof(T) == typeof(int)) { obj = (T)column.Value; } else { prop.SetValue(obj, (column.Value.Equals(DBNull.Value) ? null : column.Value)); } } objects.Add(obj); } return(objects); }