コード例 #1
0
        //增加时间的过滤条件设置
        private void appendDateFilter(List <MB.Util.Model.QueryParameterInfo> filterParam, MB.Util.Common.DateFilterType dateFilterType)
        {
            bool b = MB.Util.MyReflection.Instance.CheckTypeExistsProperty(typeof(T), MB.BaseFrame.SOD.ENTITY_LAST_MODIFIED_DATE);

            if (!b)
            {
                throw new MB.Util.APPException("当前单据不包含最后修改日期的字段,无法进行单据修改日期的配置设置", MB.Util.APPMessageType.SysErrInfo);
            }

            QueryParameterHelper paramHelper = new QueryParameterHelper();
            var      date      = paramHelper.ToDateStruct(dateFilterType);
            DateTime beginDate = date.BeginDate;
            DateTime endDate   = date.EndDate;
            var      para      = new MB.Util.Model.QueryParameterInfo(MB.BaseFrame.SOD.ENTITY_LAST_MODIFIED_DATE, beginDate, MB.Util.DataFilterConditions.Between);

            para.DataType = "DateTime";
            para.Value2   = endDate;
            filterParam.Add(para);
        }
コード例 #2
0
        //单个参数转换为SQL 语句
        private string singleParameterToSql(MB.Orm.Enums.DatabaseType dbaseType, MB.Orm.Mapping.QueryParameterMappings parsMapping, MB.Util.Model.QueryParameterInfo parInfo)
        {
            StringBuilder sqlFilter         = new StringBuilder();
            string        defaultTableAlias = (parsMapping == null || string.IsNullOrEmpty(parsMapping.DefaultTableAlias)) ? "" : parsMapping.DefaultTableAlias + ".";
            //
            QueryParameterMappingInfo mappingInfo = (parsMapping != null && parsMapping.ContainsKey(parInfo.PropertyName)) ? parsMapping[parInfo.PropertyName] : null;
            string dbFieldName = mappingInfo == null ? (defaultTableAlias + parInfo.PropertyName) : mappingInfo.FieldName;

            if (parInfo.Condition == MB.Util.DataFilterConditions.Special)
            {
                dbFieldName = parInfo.PropertyName;
            }

            //判断是否为多个值的输入形式
            if (parInfo.MultiValue && (parInfo.Condition == Util.DataFilterConditions.In ||
                                       parInfo.Condition == Util.DataFilterConditions.Equal))
            {
                string inStr = BuildQueryInSql <string>(parInfo.Value.ToString().Split(','));
                if (inStr.Length > MB.Orm.DbSql.SqlShareHelper.SQL_MAX_LENGTH)
                {
                    throw new MB.Util.APPException(string.Format("构造字段{0} 的IN 查询语句时 超长", dbFieldName));
                }
                return(string.Format("{0} IN ({1})", dbFieldName, inStr));
            }

            if (string.Compare(parInfo.DataType, "DateTime", true) == 0)
            {
                sqlFilter.Append(string.Format("{0}", dbFieldName));
            }
            else
            {
                sqlFilter.Append(dbFieldName);
            }

            sqlFilter.Append(ConvertConditionToSqlStr(parInfo.Condition));

            if (parInfo.Condition != MB.Util.DataFilterConditions.IsNotNull &&
                parInfo.Condition != MB.Util.DataFilterConditions.IsNull)
            {
                if (parInfo.Condition == MB.Util.DataFilterConditions.Between)
                {
                    sqlFilter.Append(valueToSQL(dbaseType, parInfo.DataType, parInfo.Value, parInfo.Condition));

                    sqlFilter.Append(SQL_AND);

                    sqlFilter.Append(valueToSQL(dbaseType, parInfo.DataType, parInfo.Value2, parInfo.Condition, true));
                }
                else
                {
                    sqlFilter.Append(valueToSQL(dbaseType, parInfo.DataType, parInfo.Value, parInfo.Condition));
                }
            }
            return(sqlFilter.ToString());
        }
コード例 #3
0
        //构建数据库查询参数
        private void builderQueryParams(List <MB.Util.Model.QueryParameterInfo> lstParams, CriteriaOperator op, bool isNot)
        {
            DevExpress.Data.Filtering.GroupOperator groupOp = op as DevExpress.Data.Filtering.GroupOperator;
            if (op is DevExpress.Data.Filtering.GroupOperator)
            {
                MB.Util.Model.QueryParameterInfo groupPar = null;
                if (groupOp.OperatorType == GroupOperatorType.And)
                {
                    groupPar = new MB.Util.Model.QueryParameterInfo(isNot?MB.Util.Model.QueryGroupLinkType.AndNot : MB.Util.Model.QueryGroupLinkType.AND);
                }
                else
                {
                    groupPar = new MB.Util.Model.QueryParameterInfo(isNot?MB.Util.Model.QueryGroupLinkType.OrNot : MB.Util.Model.QueryGroupLinkType.OR);
                }
                lstParams.Add(groupPar);
                foreach (CriteriaOperator childOp in groupOp.Operands)
                {
                    builderQueryParams(groupPar.Childs, childOp, isNot);
                }
            }
            else if (op is DevExpress.Data.Filtering.UnaryOperator)
            {
                DevExpress.Data.Filtering.UnaryOperator uOp = op as DevExpress.Data.Filtering.UnaryOperator;
                if (uOp.OperatorType == UnaryOperatorType.IsNull)
                {
                    MB.Util.Model.QueryParameterInfo nullPar = new MB.Util.Model.QueryParameterInfo();
                    nullPar.PropertyName = QueryParametersEditHelper.RemoveSpecName(uOp.Operand.ToString());
                    nullPar.Condition    = isNot ? MB.Util.DataFilterConditions.IsNotNull : MB.Util.DataFilterConditions.IsNull;
                    lstParams.Add(nullPar);
                }
                else if (uOp.OperatorType == UnaryOperatorType.Not)
                {
                    builderQueryParams(lstParams, uOp.Operand, true);
                }
            }
            else if (op is DevExpress.Data.Filtering.BetweenOperator)
            {
                DevExpress.Data.Filtering.BetweenOperator btOp  = op as DevExpress.Data.Filtering.BetweenOperator;
                MB.Util.Model.QueryParameterInfo          btPar = new MB.Util.Model.QueryParameterInfo();

                btPar.PropertyName = QueryParametersEditHelper.RemoveSpecName(btOp.Property.ToString());
                btPar.Condition    = isNot?MB.Util.DataFilterConditions.NotBetween:MB.Util.DataFilterConditions.Between;
                btPar.Value        = (btOp.BeginExpression as DevExpress.Data.Filtering.OperandValue).Value;
                btPar.Value2       = (btOp.EndExpression as DevExpress.Data.Filtering.OperandValue).Value;
                if (_ColPropertys.ContainsKey(btPar.PropertyName))
                {
                    btPar.DataType = _ColPropertys[btPar.PropertyName].DataType;
                }
                lstParams.Add(btPar);
            }
            else if (op is DevExpress.Data.Filtering.BinaryOperator)
            {
                DevExpress.Data.Filtering.BinaryOperator binOp  = op as DevExpress.Data.Filtering.BinaryOperator;
                MB.Util.Model.QueryParameterInfo         binPar = new MB.Util.Model.QueryParameterInfo();
                binPar.PropertyName = QueryParametersEditHelper.RemoveSpecName(binOp.LeftOperand.ToString());
                binPar.Condition    = QueryParametersEditHelper.ConvertToFilterCondition(binOp.OperatorType, isNot);
                binPar.Value        = (binOp.RightOperand as DevExpress.Data.Filtering.OperandValue).Value;
                if (_ColPropertys.ContainsKey(binPar.PropertyName))
                {
                    binPar.DataType = _ColPropertys[binPar.PropertyName].DataType;
                }
                lstParams.Add(binPar);
            }
            else if (op is DevExpress.Data.Filtering.InOperator)
            {
                DevExpress.Data.Filtering.InOperator inOp = op as DevExpress.Data.Filtering.InOperator;
                if (inOp.Operands.Count == 0)
                {
                    return;
                }

                MB.Util.Model.QueryParameterInfo inPar = new MB.Util.Model.QueryParameterInfo();
                inPar.PropertyName = QueryParametersEditHelper.RemoveSpecName(inOp.LeftOperand.ToString());
                inPar.Condition    = isNot ? MB.Util.DataFilterConditions.NotIn : MB.Util.DataFilterConditions.In;
                //获取In 的查询值
                List <string> vals = new List <string>();
                foreach (DevExpress.Data.Filtering.OperandValue v in inOp.Operands)
                {
                    if (v.Value == null)
                    {
                        continue;
                    }

                    vals.Add(v.Value.ToString());
                }
                inPar.Value = string.Join(",", vals.ToArray());
                if (_ColPropertys.ContainsKey(inPar.PropertyName))
                {
                    inPar.DataType = _ColPropertys[inPar.PropertyName].DataType;
                }
                lstParams.Add(inPar);
            }
            else
            {
            }
        }