Beispiel #1
0
        /// <summary>
        /// Transforms the expression tree into SQL script, executes it and returns the result.
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public object Execute(Expression expression)
        {
            var    methodExpression  = (MethodCallExpression)expression;
            var    genericType       = ExpressionHelper.GetFirstGenericTypeArgumentOfType(methodExpression.Method);
            var    isACommand        = IsACommand(methodExpression);
            var    queryTranslator   = new QueryTranslator(_mappingRuleTranslator);
            var    query             = queryTranslator.Translate(expression);
            var    mappingDefinition = _mappingRuleTranslator.GetMappingDefinition(genericType);
            object result            = null;

            if (isACommand)
            {
                result = query;
                _queryTracker.AddQuery(() => _queryExecutor.ExecuteCommandAndReturnObject(query));
            }
            else
            {
                result = _queryExecutor.ExecuteReaderAndReturnList(query, mappingDefinition);
            }

            return(result);
        }