Beispiel #1
0
        /// <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() + ")");
        }
Beispiel #2
0
 /// <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"));
     }
 }
Beispiel #3
0
        /// <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());
        }