private object ParseFilterValue(string propertyTypeName, ListFilterValue filterValue, Type propertyType)
 {
     if (propertyTypeName == "DateTime")
     {
         return(DateTime.Parse(filterValue.Term));
     }
     else if (propertyTypeName == "DateTimeOffset")
     {
         return(DateTimeOffset.Parse(filterValue.Term));
     }
     else if (propertyTypeName == "Int32")
     {
         return(Convert.ToInt32(filterValue.Term));
     }
     else if (propertyTypeName == "Decimal")
     {
         return(Convert.ToDecimal(filterValue.Term));
     }
     else if (propertyTypeName == "Double")
     {
         return(Convert.ToDouble(filterValue.Term));
     }
     else if (propertyTypeName == "Boolean")
     {
         return(Convert.ToBoolean(filterValue.Term));
     }
     else if (propertyType.IsEnum)
     {
         return((int)Enum.Parse(propertyType, filterValue?.Term).To(propertyType));
     }
     // strings not converted
     return(filterValue.Term);
 }
Beispiel #2
0
        // used in ModelBinder
        public static ListFilter Parse(string name, string expression)
        {
            var result = new ListFilter {
                Name = name
            };
            var value  = new ListFilterValue();
            var escape = false;
            var negate = false;

            foreach (var c in expression)
            {
                if (escape)
                {
                    value.Term += c.ToString();
                    escape      = false;
                }
                else if (c == '\\')
                {
                    escape = true;
                }
                else if (c == '!' && value.Term == "")
                {
                    value.Operator = ListFilterOperator.NotEqual;
                    negate         = true;
                }
                else if (c == '>' && value.Term == "")
                {
                    value.Operator = negate ? ListFilterOperator.LessThanOrEqual : ListFilterOperator.GreaterThan;
                }
                else if (c == '<' && value.Term == "")
                {
                    value.Operator = negate ? ListFilterOperator.GreaterThanOrEqual : ListFilterOperator.LessThan;
                }
                else if (c == '=' && value.Operator == ListFilterOperator.GreaterThan && value.Term == "")
                {
                    value.Operator = ListFilterOperator.GreaterThanOrEqual;
                }
                else if (c == '=' && value.Operator == ListFilterOperator.LessThan && value.Term == "")
                {
                    value.Operator = ListFilterOperator.LessThanOrEqual;
                }
                else if (c == '=' && value.Term == "")
                {
                    value.Operator = ListFilterOperator.Equal;
                }
                else if (c == '*')
                {
                    value.WildcardPositions.Add(value.Term.Length);
                }
                else if (c == '|')
                {
                    result.Values.Add(value);
                    value  = new ListFilterValue();
                    negate = false;
                }
                else
                {
                    value.Term += c.ToString();
                }
            }
            result.QueryParams.Add(new Tuple <string, string>(name, expression));
            result.Values.Add(value);
            return(result);
        }