Ejemplo n.º 1
0
        /// <summary>
        /// 将表达式所表示的SQL片断写入SQL构造器
        /// </summary>
        public void Write(ISqlBuilder builder, bool newLine)
        {
            if (_qOrder.Count > 0)
            {
                base._builder = builder;
                if (base._methodVisitor == null)
                {
                    base._methodVisitor = _provider.CreateCallExressionVisitor(this);
                }

                if (newLine)
                {
                    _builder.AppendNewLine();
                }
                _builder.Append("ORDER BY ");


                //foreach (DbExpression qj in _qOrder)
                for (int i = 0; i < _qOrder.Count; i++)
                {
                    this.Visit(_qOrder[i].Expressions[0]);
                    if (_qOrder[i].DbExpressionType == DbExpressionType.OrderByDescending || _qOrder[i].DbExpressionType == DbExpressionType.ThenByDescending)
                    {
                        builder.Append(" DESC");
                    }
                    if (i < _qOrder.Count - 1)
                    {
                        builder.Append(',');
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 将表达式所表示的SQL片断写入SQL构造器
        /// </summary>
        public override void Write(ISqlBuilder builder)
        {
            base._builder = builder;
            if (base._methodVisitor == null)
            {
                base._methodVisitor = _provider.CreateCallExressionVisitor(this);
            }

            foreach (DbExpression qj in _qJoin)
            {
                builder.AppendNewLine();

                // [INNER/LEFT JOIN]
                if (qj.DbExpressionType == DbExpressionType.GroupJoin || qj.DbExpressionType == DbExpressionType.Join || qj.DbExpressionType == DbExpressionType.GroupRightJoin)
                {
                    JoinType joinType = JoinType.InnerJoin;
                    if (qj.DbExpressionType == DbExpressionType.GroupJoin)
                    {
                        joinType = JoinType.LeftJoin;
                    }
                    else if (qj.DbExpressionType == DbExpressionType.GroupRightJoin)
                    {
                        joinType = JoinType.RightJoin;
                    }
                    this.AppendJoinType(builder, joinType);
                    this.AppendLfInJoin(builder, qj, _aliases);
                }
                else if (qj.DbExpressionType == DbExpressionType.SelectMany)
                {
                    this.AppendJoinType(builder, JoinType.CrossJoin);
                    this.AppendCrossJoin(builder, qj, _aliases);
                }
            }
        }
        /// <summary>
        /// 将表达式所表示的SQL片断写入SQL构造器
        /// </summary>
        public override void Write(ISqlBuilder builder)
        {
            base._builder = builder;
            if (base._methodVisitor == null)
            {
                base._methodVisitor = _provider.CreateCallExressionVisitor(this);
            }

            if (_statis != null)
            {
                Expression exp = _statis.DbExpressionType == DbExpressionType.Count ? Expression.Constant(1) : base.Expression;
                if (exp.NodeType == ExpressionType.Lambda)
                {
                    exp = (exp as LambdaExpression).Body;
                }

                // q.Average(a => a);
                // 这种情况下g.Key 一定是单个字段,否则解析出来的SQL执行不了
                if (exp.NodeType == ExpressionType.Parameter)
                {
                    exp = _groupBy.Expressions[0];
                }

                builder.Append(_statisMethods[_statis.DbExpressionType]);
                builder.Append("(");
                base.Visit(exp);
                builder.Append(")");
            }

            //base.Visit();
        }
Ejemplo n.º 4
0
 /// <summary>
 /// 将表达式所表示的SQL片断写入SQL构造器
 /// </summary>
 public virtual void Write(ISqlBuilder builder)
 {
     _builder = builder;
     if (_methodVisitor == null)
     {
         _methodVisitor = _provider.CreateCallExressionVisitor(this);
     }
     this.Visit(_expression);
 }
Ejemplo n.º 5
0
        /// <summary>
        /// 将表达式所表示的SQL片断写入SQL构造器
        /// </summary>
        public override void Write(ISqlBuilder builder)
        {
            if (base.Expression != null)
            {
                base._builder = builder;
                if (base._methodVisitor == null)
                {
                    base._methodVisitor = _provider.CreateCallExressionVisitor(this);
                }
                _builder.AppendNewLine();

                // SELECT 表达式解析
                if (base.Expression.NodeType == ExpressionType.Constant)
                {
                    // if have no select syntax
                    Type type = (base.Expression as ConstantExpression).Value as Type;
                    this.VisitAllMember(type, "t0");
                }
                else
                {
                    base.Write(builder);
                }
                // Include 表达式解析<导航属性>
                this.VisitInclude();

                // 去掉最后的空格和回车
                if (_builder[_builder.Length - 1].ToString() != _provider.QuoteSuffix)
                {
                    int space = Environment.NewLine.Length + 1;
                    int index = _builder.Length - 1;
                    while (_builder[index] == ' ')
                    {
                        space++;
                        index--;
                    }
                    _builder.Length -= space;
                }
            }
        }