//增加时间的过滤条件设置 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); }
//单个参数转换为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()); }
//构建数据库查询参数 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 { } }