private static object[] GetValue(FilterCondition condition, Type fieldType)
        {
            switch (condition.Type)
            {
            case FilterType.Boolean:
                return(new object[] { condition.Value <bool>() });

            case FilterType.Date:
                return(new object[] { condition.Value <DateTime>() });

            case FilterType.Numeric:
                var castType = fieldType;
                if (castType.IsGenericType &&
                    castType.GetGenericTypeDefinition().IsAssignableFrom(typeof(Nullable <>)))
                {
                    castType = castType.GetGenericArguments()[0];
                }
                var strValue         = condition.Value <string>();
                var decimalSeparator = Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator;
                var newstrValue      = decimalSeparator == "."
                        ? strValue.Replace(",", ".")
                        : strValue.Replace(".", ",");
                return(new[] { Convert.ChangeType(newstrValue, castType) });

            case FilterType.String:
                return(new object[] { condition.Value <string>() });

            case FilterType.List:
                return(condition.List.Cast <object>().ToArray());

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
 /// <summary>
 /// 如果给定的FilterCondition是列表类型,则取出这个列表
 /// </summary>
 /// <param name="fc"></param>
 /// <returns></returns>
 public static List<int> GetListValues(FilterCondition fc)
 {
     JArray source = fc.Value<JArray>();
     List<int> values = new List<int>();
     source.ToList<JToken>().ForEach(delegate(JToken x)
     {
         values.Add(x.Value<int>());
     });
     return values;
 }
Beispiel #3
0
        /// <summary>
        /// 如果给定的FilterCondition是列表类型,则取出这个列表
        /// </summary>
        /// <param name="fc"></param>
        /// <returns></returns>
        public static List <int> GetListValues(FilterCondition fc)
        {
            JArray     source = fc.Value <JArray>();
            List <int> values = new List <int>();

            source.ToList <JToken>().ForEach(delegate(JToken x)
            {
                values.Add(x.Value <int>());
            });
            return(values);
        }
Beispiel #4
0
        /// <summary>
        /// 获取参数名用,通过FilterCondition获得参数名
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        protected object GetParamerValue(FilterCondition condition)
        {
            object value = null;

            switch (condition.ValueType)
            {
            case JTokenType.Boolean:
            {
                value = condition.Value <bool>();
                break;
            }

            case JTokenType.Date:
            {
                value = condition.Value <DateTime>();
                break;
            }

            case JTokenType.String:
            {
                value = condition.Value <string>();
                break;
            }

            case JTokenType.Integer:
            {
                value = condition.Value <int>();
                break;
            }

            case JTokenType.Float:
            {
                value = condition.Value <float>();
                break;
            }
            }
            return(value);
        }
Beispiel #5
0
        /// <summary>
        /// 将给定的Ext.Net过滤器转换为可供转换为Sql语句的过滤器
        /// </summary>
        /// <param name="filterCondition"></param>
        /// <param name="field"></param>
        /// <returns></returns>
        static SqlFilter ConvertToFilter(FilterCondition filterCondition, string field)
        {
            object    valueObject = filterCondition.Value <object>();
            SqlFilter filter      = new SqlFilter();
            var       comparison  = filterCondition.Comparison;

            filter.Name = field;
            if (valueObject is JValue)
            {
                JValue jValue       = valueObject as JValue;
                object jValueObject = jValue.Value;
                switch (jValue.Type)
                {
                case JTokenType.Integer:
                    jValueObject = Convert.ToInt32(jValueObject);
                    break;

                case JTokenType.Float:
                    jValueObject = Convert.ToDecimal(jValueObject);
                    break;

                case JTokenType.String:
                    jValueObject = Convert.ToString(jValueObject);
                    break;

                case JTokenType.Boolean:
                    jValueObject = Convert.ToBoolean(jValueObject);
                    break;

                case JTokenType.Date:
                    jValueObject = Convert.ToDateTime(jValueObject);
                    break;

                default:
                    throw new NotSupportedException("未支持的JTokenType" + jValue.Type);
                }
                filter.Value = jValueObject;
                switch (comparison)
                {
                case Comparison.Eq:
                    filter.Operation = Operation.Equal;
                    break;

                case Comparison.Gt:
                    filter.Operation = Operation.GreaterThan;
                    break;

                case Comparison.Lt:
                    filter.Operation = Operation.LessThan;
                    break;
                }
                if (jValueObject is string)
                {
                    filter.Operation = Operation.Like;
                }
            }
            else if (valueObject is JArray)
            {
                filter.Operation = Operation.List;
                JArray     source = valueObject as JArray;
                List <int> values = new List <int>();
                source.ToList <JToken>().ForEach(delegate(JToken x)
                {
                    values.Add(x.Value <int>());
                });
                filter.Value = values;
            }
            return(filter);
        }
        //public static DynamicSqlParam[] ToSqlParams(FilterConditions filters, IDynamicParamConverter converter)
        //{
        //    List<DynamicSqlParam> list = new List<DynamicSqlParam>();
        //    foreach (FilterCondition condition in filters.Conditions)
        //    {
        //        Comparison comparison = condition.Comparison;
        //        string field = condition.Field;
        //        if (converter != null)
        //        {
        //            if (converter.FieldMap.ContainsKey(field))
        //            {
        //                field = converter.FieldMap[field];
        //                if (string.IsNullOrEmpty(field))
        //                {
        //                    continue;
        //                }
        //            }
        //            else if (converter.Converters.ContainsKey(field))
        //            {
        //                list.AddRange(converter.Converters[field](condition));
        //                continue;
        //            }
        //        }
        //        FilterType type = condition.Type;
        //        object obj2 = condition.Value<object>();
        //        DynamicSqlFilter item = DynamicSqlParam.CreateFilter();
        //        item.Name = field;
        //        if (obj2 is JValue)
        //        {
        //            JValue value2 = obj2 as JValue;
        //            object obj3 = value2.Value;
        //            switch (value2.Type)
        //            {
        //                case JTokenType.Integer:
        //                    obj3 = Convert.ToInt32(obj3);
        //                    break;

        //                case JTokenType.Float:
        //                    obj3 = Convert.ToDecimal(obj3);
        //                    break;

        //                case JTokenType.String:
        //                    obj3 = Convert.ToString(obj3);
        //                    break;

        //                case JTokenType.Boolean:
        //                    obj3 = Convert.ToBoolean(obj3);
        //                    break;

        //                case JTokenType.Date:
        //                    obj3 = Convert.ToDateTime(obj3);
        //                    break;

        //                default:
        //                    throw new NotSupportedException("未支持的JTokenType" + value2.Type);
        //            }
        //            item.Value = obj3;
        //            switch (comparison)
        //            {
        //                case Comparison.Eq:
        //                    item.Operation = Operation.Equal;
        //                    break;

        //                case Comparison.Gt:
        //                    item.Operation = Operation.GreaterThan;
        //                    break;

        //                case Comparison.Lt:
        //                    item.Operation = Operation.LessThan;
        //                    break;
        //            }
        //            if (obj3 is string)
        //            {
        //                item.Operation = Operation.Like;
        //            }
        //        }
        //        else if (obj2 is JArray)
        //        {
        //            item.Operation = Operation.List;
        //            JArray source = obj2 as JArray;
        //            List<int> values = new List<int>();
        //            source.ToList<JToken>().ForEach(delegate(JToken x)
        //            {
        //                values.Add(x.Value<int>());
        //            });
        //            item.Value = values;
        //        }
        //        list.Add(item);
        //    }
        //    return list.ToArray();
        //}

        //public static DynamicSqlParam[] ToSqlParams(FilterConditions filters, Func<string, string> fieldMap)
        //{
        //    List<DynamicSqlParam> list = new List<DynamicSqlParam>();
        //    foreach (FilterCondition condition in filters.Conditions)
        //    {
        //        Comparison comparison = condition.Comparison;
        //        string field = condition.Field;
        //        if (fieldMap != null)
        //        {
        //            field = fieldMap(field);
        //            if (string.IsNullOrEmpty(field))
        //            {
        //                continue;
        //            }
        //        }
        //        FilterType type = condition.Type;
        //        object obj2 = condition.Value<object>();
        //        DynamicSqlFilter item = DynamicSqlParam.CreateFilter();
        //        item.Name = field;
        //        if (obj2 is JValue)
        //        {
        //            JValue value2 = obj2 as JValue;
        //            object obj3 = value2.Value;
        //            switch (value2.Type)
        //            {
        //                case JTokenType.Integer:
        //                    obj3 = Convert.ToInt32(obj3);
        //                    break;

        //                case JTokenType.Float:
        //                    obj3 = Convert.ToDecimal(obj3);
        //                    break;

        //                case JTokenType.String:
        //                    obj3 = Convert.ToString(obj3);
        //                    break;

        //                case JTokenType.Boolean:
        //                    obj3 = Convert.ToBoolean(obj3);
        //                    break;

        //                case JTokenType.Date:
        //                    obj3 = Convert.ToDateTime(obj3);
        //                    break;

        //                default:
        //                    throw new NotSupportedException("未支持的JTokenType" + value2.Type);
        //            }
        //            item.Value = obj3;
        //            switch (comparison)
        //            {
        //                case Comparison.Eq:
        //                    item.Operation = Operation.Equal;
        //                    break;

        //                case Comparison.Gt:
        //                    item.Operation = Operation.GreaterThan;
        //                    break;

        //                case Comparison.Lt:
        //                    item.Operation = Operation.LessThan;
        //                    break;
        //            }
        //            if (obj3 is string)
        //            {
        //                item.Operation = Operation.Like;
        //            }
        //        }
        //        else if (obj2 is JArray)
        //        {
        //            item.Operation = Operation.List;
        //            JArray source = obj2 as JArray;
        //            List<int> values = new List<int>();
        //            source.ToList<JToken>().ForEach(delegate(JToken x)
        //            {
        //                values.Add(x.Value<int>());
        //            });
        //            item.Value = values;
        //        }
        //        list.Add(item);
        //    }
        //    return list.ToArray();
        //}

        //public static List<DynamicSqlParam> ToSqlParams(StoreReadDataEventArgs e, IDynamicParamConverter converter, bool autoGenerateSort = true)
        //{
        //    List<DynamicSqlParam> list = new List<DynamicSqlParam>();
        //    if (!string.IsNullOrEmpty(e.Parameters["filter"]))
        //    {
        //        list.AddRange(ToSqlParams(new FilterConditions(e.Parameters["filter"]), converter));
        //    }
        //    List<DynamicSqlParam> collection = ToSqlParams(e.Sort, converter.FieldMap).ToList<DynamicSqlParam>();
        //    if (autoGenerateSort && (collection.Count <= 0))
        //    {
        //        DynamicSqlSorter item = DynamicSqlParam.CreateSorter();
        //        item.Direction = Xinchen.DbUtils.Direction.ASC;
        //        item.Name = MapField(converter, "Id");
        //        collection.Add(item);
        //    }
        //    list.AddRange(collection);
        //    return list;
        //}

        /// <summary>
        /// 将给定的Ext.Net过滤器转换为可供转换为Sql语句的过滤器
        /// </summary>
        /// <param name="filterCondition"></param>
        /// <param name="field"></param>
        /// <returns></returns>
        static SqlFilter ConvertToFilter(FilterCondition filterCondition, string field)
        {
            object valueObject = filterCondition.Value<object>();
            SqlFilter filter = new SqlFilter();
            var comparison = filterCondition.Comparison;
            filter.Name = field;
            if (valueObject is JValue)
            {
                JValue jValue = valueObject as JValue;
                object jValueObject = jValue.Value;
                switch (jValue.Type)
                {
                    case JTokenType.Integer:
                        jValueObject = Convert.ToInt32(jValueObject);
                        break;

                    case JTokenType.Float:
                        jValueObject = Convert.ToDecimal(jValueObject);
                        break;

                    case JTokenType.String:
                        jValueObject = Convert.ToString(jValueObject);
                        break;

                    case JTokenType.Boolean:
                        jValueObject = Convert.ToBoolean(jValueObject);
                        break;

                    case JTokenType.Date:
                        jValueObject = Convert.ToDateTime(jValueObject);
                        break;

                    default:
                        throw new NotSupportedException("未支持的JTokenType" + jValue.Type);
                }
                filter.Value = jValueObject;
                switch (comparison)
                {
                    case Comparison.Eq:
                        filter.Operation = Operation.Equal;
                        break;

                    case Comparison.Gt:
                        filter.Operation = Operation.GreaterThan;
                        break;

                    case Comparison.Lt:
                        filter.Operation = Operation.LessThan;
                        break;
                }
                if (jValueObject is string)
                {
                    filter.Operation = Operation.Like;
                }
            }
            else if (valueObject is JArray)
            {
                filter.Operation = Operation.List;
                JArray source = valueObject as JArray;
                List<int> values = new List<int>();
                source.ToList<JToken>().ForEach(delegate(JToken x)
                {
                    values.Add(x.Value<int>());
                });
                filter.Value = values;
            }
            return filter;
        }