/// <summary> /// 分解操作符为In的过滤参数,返回组合好的过滤条件表达式 /// </summary> /// <param name="para"></param> private static string GenerateConditionFromInParameter(FilterParameter para) { string formatString = " {0} {1} {2}"; StringBuilder expressions = new StringBuilder(); // 先用','作为分隔符,拆分出独立的条件 string[] separator1 = new string[] { "," }; string[] separator2 = new string[] { "~" }; string[] values = para.ParameterValue.ToString().Split(separator1, StringSplitOptions.None); string[] rangs; StringBuilder inValues = new StringBuilder(); // 保存In条件的单个值 foreach (string condition in values) { if (condition.Contains("~")) // 范围型转换为">=" 和 "<="两个条件 { if (expressions.Length > 0) { expressions.Append(" OR "); } rangs = condition.Split(separator2, StringSplitOptions.None); expressions.AppendFormat(CultureInfo.CurrentCulture , " ({0} >= {1} AND {0} <= {2})" , para.FieldName , rangs[0], rangs[1]); } else if (condition.Contains("%")) // 含有"%"的转换为"like"条件 { if (expressions.Length > 0) { expressions.Append(" OR "); } expressions.Append(String.Format(CultureInfo.CurrentCulture , formatString , para.FieldName , CommonOperation.GetOperatorSign(CompareOperator.Like) , condition)); } else //其它的单个值保存下来作为In条件的值,最后统一加 { if (inValues.Length > 0) { inValues.Append(','); } inValues.Append(condition); } } if (inValues.Length > 0) { if (expressions.Length > 0) { expressions.Append(" OR "); } expressions.Append(String.Format(CultureInfo.CurrentCulture , "{0} in ({1})" , para.FieldName , inValues.ToString())); } return("(" + expressions.ToString() + ")"); }
/// <summary> /// 检查传入的参数值是否符合参数类型的要求 /// (主要是防止将字符型数据赋给数值型参数) /// </summary> /// <param name="paraValue"></param> private void CheckValueType(string paraValue) { if ((!IsString) && (CommonOperation.GetStringType(paraValue) != StringType.Numeric) && (CommonOperation.GetStringType(paraValue) != StringType.Empty)) { throw new ArithmeticException(MessageStringManager.GetString("CouldNotSetStringToDigital")); } }
/// <summary> /// 获取当前字典类默认的过滤条件 /// </summary> /// <returns></returns> public string GenerateFilterExpression() { string formatString = " {0} {1} {2}"; // 字段名 操作符 值 StringBuilder expressions = new StringBuilder(); // 增加附加条件 if ((ExtraCondition != null) && (ExtraCondition.Length > 0)) { expressions.Append(ExtraCondition); } // 增加参数条件 foreach (FilterParameter para in _parameters) { if (!para.Enabled) { continue; } if (expressions.Length > 0) { expressions.Append(" AND "); } // 如果操作符是IN,则特殊处理(参数值可能是范围型的) if (para.Operator == CompareOperator.In) { expressions.Append(GenerateConditionFromInParameter(para)); } else { expressions.Append(String.Format(CultureInfo.CurrentCulture , formatString , para.FieldName , CommonOperation.GetOperatorSign(para.Operator) , CommonOperation.TransferCondition(para.ParameterValue, para.Operator))); } } return(expressions.ToString()); }