public static ICollection <IQueryableTypeFilter> InitializeMap(IQueryableFilterMap queryableFilterMap)
        {
            var list = new List <IQueryableTypeFilter>();

            list.AddRange(BaseFilterMapFactory.InitializeMap(queryableFilterMap));
            list.AddRange(SpecificFilterMap(queryableFilterMap));

            return(list);
        }
Пример #2
0
 public static ICollection <IQueryableTypeFilter> InitializeMap(IQueryableFilterMap queryableFilterMap) => new List <IQueryableTypeFilter>
 {
     new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.Equal), Expression.Equal),
     new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.NotEqual), Expression.NotEqual),
     new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.LessThan), Expression.LessThan),
     new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.LessThanOrEqual), Expression.LessThanOrEqual),
     new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.GreaterThan), Expression.GreaterThan),
     new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.GreaterThanOrEqual), Expression.GreaterThanOrEqual),
 };
        private static IEnumerable <IQueryableTypeFilter> SpecificFilterMap(IQueryableFilterMap queryableFilterMap) => new List <IQueryableTypeFilter>
        {
            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.Contains), (left, right) =>
            {
                var method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
                return(_addNotNull(left, Expression.Call(left, method, right)));
            }),
            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.NotContains), (left, right) =>
            {
                var method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
                return(_addNull(left, Expression.Not(Expression.Call(left, method, right))));
            }),


            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.StartsWith), (left, right) =>
            {
                var method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });
                return(_addNotNull(left, Expression.Call(left, method, right)));
            }),
            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.NotStartsWith), (left, right) =>
            {
                var method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });
                return(_addNull(left, Expression.Not(Expression.Call(left, method, right))));
            }),


            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.EndsWith), (left, right) =>
            {
                var method = typeof(string).GetMethod("EndsWith", new[] { typeof(string) });
                return(_addNotNull(left, Expression.Call(left, method, right)));
            }),
            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.NotEndsWith), (left, right) =>
            {
                var method = typeof(string).GetMethod("EndsWith", new[] { typeof(string) });
                return(_addNull(left, Expression.Not(Expression.Call(left, method, right))));
            }),


            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.ContainsIgnoreCase), (left, right) =>
            {
                var method = typeof(string).GetMethod("Contains", new[] { typeof(string) });

                var leftToLower  = Expression.Call(left, "ToLowerInvariant", null);
                var rigthToLower = Expression.Call(right, "ToLowerInvariant", null);

                return(_addNotNull(left, Expression.Call(leftToLower, method, rigthToLower)));
            }),
            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.NotContainsIgnoreCase), (left, right) =>
            {
                var method = typeof(string).GetMethod("IndexOf", new[] { typeof(string) });

                var leftToLower  = Expression.Call(left, "ToLowerInvariant", null);
                var rigthToLower = Expression.Call(right, "ToLowerInvariant", null);

                return(_addNull(left, Expression.Not(Expression.Call(leftToLower, method, rigthToLower))));
            }),


            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.StartsWithIgnoreCase), (left, right) =>
            {
                var method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });

                var leftToLower  = Expression.Call(left, "ToLowerInvariant", null);
                var rigthToLower = Expression.Call(right, "ToLowerInvariant", null);

                return(_addNotNull(left, Expression.Call(leftToLower, method, rigthToLower)));
            }),
            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.NotStartsWithIgnoreCase), (left, right) =>
            {
                var method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });

                var leftToLower  = Expression.Call(left, "ToLowerInvariant", null);
                var rigthToLower = Expression.Call(right, "ToLowerInvariant", null);

                return(_addNull(left, Expression.Not(Expression.Call(leftToLower, method, rigthToLower))));
            }),


            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.EndsWithIgnoreCase), (left, right) =>
            {
                var method = typeof(string).GetMethod("EndsWith", new[] { typeof(string) });
                //Expression.s

                var leftToLower  = Expression.Call(left, "ToLowerInvariant", null);
                var rigthToLower = Expression.Call(right, "ToLowerInvariant", null);

                return(_addNotNull(left, Expression.Call(leftToLower, method, rigthToLower)));
            }),
            new QueryableTypeFilter(queryableFilterMap.GetFilter(ConditionAlias.NotEndsWithIgnoreCase), (left, right) =>
            {
                var method = typeof(string).GetMethod("EndsWith", new[] { typeof(string) });

                var leftToLower  = Expression.Call(left, "ToLowerInvariant", null);
                var rigthToLower = Expression.Call(right, "ToLowerInvariant", null);

                return(_addNull(left, Expression.Not(Expression.Call(leftToLower, method, rigthToLower))));
            }),
        };