public object Execute <TResult>(string sql, object[] variables, QueryResultMethod queryResultMethod) { if (queryResultMethod == QueryResultMethod.Delete) { Db.SlowSQL(sql, variables); return(null); } Type resultType = typeof(TResult); if (resultType != typeof(string) && typeof(IEnumerable).IsAssignableFrom(resultType)) { Type resultItemType = resultType.GetGenericArguments().FirstOrDefault(); if (resultItemType != null) { IEnumerable <object> queryResult = Db.SlowSQL(sql, variables); MethodInfo castItemsMethod = ReflectionHelper.GetEnumerableCastMethod(resultItemType); return((TResult)castItemsMethod.Invoke(null, new object[] { queryResult })); } return(Db.SlowSQL <T>(sql, variables)); } var result = Query(sql, variables, queryResultMethod); if (result == null) { return(default(TResult)); } return((TResult)CastHelper.Convert(result, resultType)); }