Esempio n. 1
0
        private static Predicate CreateDelegate(FilterTypes filters)
        {
            //Sort predicates by heaviness

            Expression  resultExpression = null;
            FilterTypes sexStatusFilter  = (filters & FilterTypes.sex_status_all_types);

            if (sexStatusFilter != FilterTypes.empty)
            {
                resultExpression = ExpressionCache[sexStatusFilter];
            }

            filters = filters.ResetFlags(sexStatusFilter);

            foreach (FilterTypes filterType in filters.EnumerateSetFlags())
            {
                var expression = ExpressionCache[filterType];

                if (resultExpression == null)
                {
                    resultExpression = expression;
                }
                else
                {
                    resultExpression = Expression.AndAlso(resultExpression, expression);
                }
            }

            return(Expression
                   .Lambda <Predicate>(resultExpression, AccountParameter, QueryParameter)
                   .Compile(false));
        }
Esempio n. 2
0
        private static Predicate Fallback(FilterTypes filters)
        {
            if (MissesCache.TryGetValue(filters, out Predicate result))
            {
                return(result);
            }

            result = CreateDelegate(filters);


            if (MissesCache.TryAdd(filters, result))
            {
                IEnumerable <string> elements = filters.EnumerateSetFlags().Select(x => $"{nameof(FilterTypes)}.{x}");
                Console.WriteLine(string.Join(" | ", elements) + ",");
            }

            return(result);
        }