示例#1
0
        private Expression GetConjuction(ParserContext ctx)
        {
            skipWhiteSpace(ctx);
            var a = GetNegation(ctx);

            while (ctx.CurrentPosition != ctx.Text.Length && skipCharacter('&', ctx))
            {
                a = new Conjuction(a, GetNegation(ctx));
            }
            skipWhiteSpace(ctx);
            return(a);
        }
示例#2
0
        /// <summary>
        /// 增加逻辑连接符
        /// </summary>
        /// <param name="logicOperator"></param>
        public virtual void AddLogicOperator(Conjuction logicOperator)
        {
            if (lastIsConjuction)
            {
                return;
            }
            string paramStr = "";

            if (logicOperator == Conjuction.And)
            {
                paramStr = " and";
            }
            else if (logicOperator == Conjuction.Or)
            {
                paramStr = " or";
            }
            this.ItemList.Add(logicOperator);
            this.filterSQLString += paramStr;
            lastIsConjuction      = true;
        }
示例#3
0
        /// <summary>
        /// 表达式类型转换 连接类型
        /// </summary>
        /// <param name="expType">表达式连接类型</param>
        /// <returns></returns>
        private Conjuction GetConjuction(ExpressionType expType)
        {
            Conjuction conjuction = Conjuction.None;

            switch (expType)
            {
            case ExpressionType.And:
            case ExpressionType.AndAlso:
                conjuction = Conjuction.And;
                break;

            case ExpressionType.Or:
            case ExpressionType.OrElse:
                conjuction = Conjuction.Or;
                break;

            default:
                throw new Exception("表达式间连接类型无效:" + expType.ToString());
            }
            return(conjuction);
        }
示例#4
0
        /// <summary>
        /// 增加查询项
        /// </summary>
        /// <param name="fieldName"></param>
        /// <param name="conjuction"></param>
        /// <param name="operand"></param>
        /// <param name="value"></param>
        public virtual void AddQueryItem(string fieldName, Conjuction conjuction, Operand operand, object value, DbType dbType)
        {
            QueryParameter p = new QueryParameter();

            p.FieldName       = fieldName;
            p.ParameterValue  = value;
            p.ParameterDbType = dbType;
            p.Op   = operand;
            p.Conj = conjuction;

            string whereClause = "";

            switch (p.Op)
            {
            case Operand.Equal:
                p.ParameterName = GetParameterName(fieldName);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + " = " + p.ParameterName;
                break;

            case Operand.NotEqual:
                p.ParameterName = GetParameterName(fieldName);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + "<>" + p.ParameterName;
                break;

            case Operand.GreaterThan:
                p.ParameterName = GetParameterName(fieldName);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + ">" + p.ParameterName;
                break;

            case Operand.LessThan:
                p.ParameterName = GetParameterName(fieldName);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + "<" + p.ParameterName;
                break;

            case Operand.LessThanOrEqual:
                p.ParameterName = GetParameterName(fieldName);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + "<=" + p.ParameterName;
                break;

            case Operand.GreaterThanOrEqual:
                p.ParameterName = GetParameterName(fieldName);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + ">=" + p.ParameterName;
                break;

            case Operand.Like:
                p.ParameterName  = GetParameterName(fieldName);
                p.ParameterValue = string.Format("%{0}%", p.ParameterValue);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + " like " + p.ParameterName;
                break;

            case Operand.RightLike:
                p.ParameterName  = GetParameterName(fieldName);
                p.ParameterValue = string.Format("%{0}", p.ParameterValue);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + " like " + p.ParameterName;
                break;

            case Operand.LeftLike:
                p.ParameterName  = GetParameterName(fieldName);
                p.ParameterValue = string.Format("{0}%", p.ParameterValue);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + " like " + p.ParameterName;
                break;

            case Operand.NotLike:
                p.ParameterName  = GetParameterName(fieldName);
                p.ParameterValue = string.Format("%{0}%", p.ParameterValue);
                this.filterParameters.Add(p);
                whereClause += " " + p.FieldName + " not like " + p.ParameterName;
                break;

            case Operand.Contains:
                whereClause += " Contains ( " + p.FieldName + " , " + p.ParameterName + " )";
                break;

            case Operand.IsNull:
                whereClause += " " + p.FieldName + " is null";
                break;

            case Operand.IsNotNull:
                whereClause += " " + p.FieldName + " is not null";
                break;

            case Operand.In:            //in 需要参数格式 @p1, @p2, @p3,...
                p.ParameterName = AddInParam(fieldName, value, dbType);
                if (!string.IsNullOrEmpty(p.ParameterName))
                {       //判断参数有效 此条件有效
                    whereClause += " " + p.FieldName + " in (" + p.ParameterName + ") ";
                }
                else
                {       //如果 in条件为空. 返回空列表
                    whereClause += " 1 = 0";
                }
                break;

            case Operand.NotIn:
                p.ParameterName = AddInParam(fieldName, value, dbType);
                if (!string.IsNullOrEmpty(p.ParameterName))
                {       //判断参数有效 此条件有效
                    whereClause += " " + p.FieldName + " not in (" + p.ParameterName + ") ";
                }
                else
                {       //如参数为空,忽略此参数 返回所有
                }
                break;

            case Operand.FieldEqual:
                whereClause += " " + p.FieldName + " = " + p.ParameterValue.ToString();
                break;

            case Operand.FieldGreaterThan:
                whereClause += " " + p.FieldName + " > " + p.ParameterValue.ToString();
                break;

            case Operand.FieldLessThan:
                whereClause += " " + p.FieldName + " < " + p.ParameterValue.ToString();
                break;

            case Operand.FieldGreaterThanOrEqual:
                whereClause += " " + p.FieldName + " >= " + p.ParameterValue.ToString();
                break;

            case Operand.FieldLessThanOrEqual:
                whereClause += " " + p.FieldName + " <= " + p.ParameterValue.ToString();
                break;
            }
            if (!lastIsConjuction)
            {
                string conjuctionStr = "";
                if (p.Conj == Conjuction.And)
                {
                    conjuctionStr = " and";
                }
                else if (p.Conj == Conjuction.Or)
                {
                    conjuctionStr = " or";
                }
                this.filterSQLString += conjuctionStr;
            }
            if (!string.IsNullOrEmpty(whereClause))
            {
                this.filterSQLString += whereClause;
                this.ItemList.Add(p);
                lastIsConjuction = false;
            }
        }
示例#5
0
 /// <summary>
 /// 增加查询项
 /// </summary>
 /// <param name="fieldName"></param>
 /// <param name="conjuction"></param>
 /// <param name="operand"></param>
 /// <param name="compareValue"></param>
 /// <returns></returns>
 public virtual void AddQueryItem(string fieldName, Conjuction conjuction, Operand operand, object compareValue)
 {
     AddQueryItem(fieldName, conjuction, operand, compareValue, DbTypeConvertor.GetDbType(compareValue));
 }