Beispiel #1
0
        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));
        }