コード例 #1
0
        /// <inheritdoc />
        public WhereExpression GenerateWhereCondition(Expression whereExpression)
        {
            Check.NotNull(whereExpression, nameof(whereExpression));

            LinqParameters    = new Parameters();
            LinqStringBuilder = new StringBuilder();
            MemberExpressionStack.Clear();

            Visit(whereExpression);

            return(new WhereExpression(LinqStringBuilder.ToString(), LinqParameters.GetParams()));
        }
コード例 #2
0
        /// <summary>
        /// Visits the member.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <exception cref="System.NotSupportedException">If the member type is not supported.</exception>
        protected override Expression VisitMember(MemberExpression expression)
        {
            if (expression.Expression != null &&
                (expression.Expression.NodeType == ExpressionType.Parameter ||
                 expression.Expression.NodeType == ExpressionType.Convert))
            {
                AppendMemberColumnName(expression);
                return(expression);
            }

            MemberExpressionStack.Push(expression);
            Expression result = base.VisitMember(expression);

            if (PreviousMemberExpression == expression)
            {
                MemberExpressionStack.Pop();
            }
            return(result);
        }
コード例 #3
0
        /// <summary>
        /// Generates the SQL from expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <returns>SQL select command text.</returns>
        public virtual QueryInfo GenerateSql(Expression expression)
        {
            Check.NotNull(expression, nameof(expression));
            _wasAny          = false;
            _sqlBuilder      = new StringBuilder();
            _top             = 0;
            _topPosition     = 0;
            _skip            = 0;
            _columnsPosition = 0;
            LinqParameters   = new Parameters();
            Orders.Clear();
            MemberExpressionStack.Clear();

            Visit(expression);

            CheckSkip();

            AddOrderBy();
            AddAnyMethod();
            AddLimitAndOffset();

            return(new QueryInfo(SqlBuilder.ToString(), CreateQueryReader()));
        }
コード例 #4
0
        /// <summary>
        /// Returns value of constant expression <paramref name="expression"/>.
        /// </summary>
        /// <param name="expression">Expression.</param>
        /// <returns>Value of the <paramref name="expression"/>.</returns>
        protected object GetConstantExpressionValue(ConstantExpression expression)
        {
            object           val = expression.Value;
            MemberExpression prevNode;

            while ((prevNode = PreviousMemberExpression) != null)
            {
                if (prevNode.Member is FieldInfo fi)
                {
                    val = fi.GetValue(val);
                }
                else if (prevNode.Member is PropertyInfo pi)
                {
                    val = pi.GetValue(val);
                }
                else
                {
                    throw new NotSupportedException(
                              string.Format(Resources.Error_CannotGetValueOfConstantExpression, expression));
                }
                MemberExpressionStack.Pop();
            }
            return(val);
        }