Пример #1
0
        private static Expression MakeComparison(Expression left, TypeFilterEnum comparison, string value)
        {
            switch (comparison)
            {
            case TypeFilterEnum.EQUAL:
                return(MakeBinary(ExpressionType.Equal, left, value));

            case TypeFilterEnum.NOT_EQUAL:
                return(MakeBinary(ExpressionType.NotEqual, left, value));

            case TypeFilterEnum.GREATER_THAN:
                return(MakeBinary(ExpressionType.GreaterThan, left, value));

            case TypeFilterEnum.GREATER_THAN_OR_EQUAL:
                return(MakeBinary(ExpressionType.GreaterThanOrEqual, left, value));

            case TypeFilterEnum.LESS_THAN:
                return(MakeBinary(ExpressionType.LessThan, left, value));

            case TypeFilterEnum.LESS_THAN_OR_EQUAL:
                return(MakeBinary(ExpressionType.LessThanOrEqual, left, value));

            case TypeFilterEnum.CONTAINS:
            case TypeFilterEnum.STARTS_WITH:
            case TypeFilterEnum.ENDS_WITH:
                return(Expression.Call(MakeString(left), GetStringComparison(comparison), Type.EmptyTypes, Expression.Constant(value, typeof(string))));

            default:
                throw new NotSupportedException($"Invalid comparison operator '{comparison}'.");
            }
        }
        public static string Format(this TypeFilterEnum typeFilter)
        {
            switch (typeFilter)
            {
            case TypeFilterEnum.Movie:
                return("movie");

            case TypeFilterEnum.Episode:
                return("episode");

            case TypeFilterEnum.All:
                return("all");

            default:
                throw new ArgumentException(nameof(typeFilter));
            }
        }
 public WhereDinamicItem(string propertyName, TypeFilterEnum typeFilter, string value)
 {
     PropertyName = propertyName;
     TypeFilter   = typeFilter;
     Value        = value;
 }
Пример #4
0
        public static Expression <Func <T, bool> > BuildPredicate <T>(string propertyName, TypeFilterEnum comparison, string value)
        {
            var parameter = Expression.Parameter(typeof(T), "x");
            var left      = propertyName.Split('.').Aggregate((Expression)parameter, Expression.Property);
            var body      = MakeComparison(left, comparison, value);

            return(Expression.Lambda <Func <T, bool> >(body, parameter));
        }
Пример #5
0
 private static string GetStringComparison(TypeFilterEnum typeFilterEnum) => typeFilterEnum switch
 {