Exemple #1
0
        public FilterElementPredicate <T> AppendChildPredicate(FilterElement filterEl)
        {
            FilterElementPredicateFactory <T> factory        = new FilterElementPredicateFactory <T>();
            FilterElementPredicate <T>        childPredicate = factory.Create <FilterElementPredicate <T> >(filterEl);

            if (childPredicate != null)
            {
                ChildPredicates.Add(childPredicate);
            }

            return(childPredicate);
        }
        private static void ConstructPredicate(FilterElementPredicate <DateTime> predicate, FilterElementCollection filterColl, string sourceName)
        {
            foreach (FilterElement filterEl in filterColl)
            {
                if (filterEl.HasChildElements)
                {
                    //Создаем блок
                    predicate = predicate.AppendChildPredicate(filterEl);
                    //рекурсивно обрабатываем дочерние фильтры
                    ConstructPredicate(predicate, filterEl.ChildElements, sourceName);
                }

                if (filterEl.Source == sourceName)
                {
                    predicate.AppendChildPredicate(filterEl);
                }
            }
        }
Exemple #3
0
        FilterElementPredicate <T> IFactoryMethod <FilterElementPredicate <T> > .Create(object obj)
        {
            FilterElementPredicate <T> retVal = null;
            FilterElement filterEl            = obj as FilterElement;

            if (filterEl != null)
            {
                if (filterEl.Type == FilterElementType.AndBlock)
                {
                    retVal = new AndBlockFilterElementPredicate <T>();
                    foreach (FilterElement childFilterEl in filterEl.ChildElements)
                    {
                        retVal.AppendChildPredicate(childFilterEl);
                    }
                }
                if (filterEl.Type == FilterElementType.OrBlock)
                {
                    retVal = new OrBlockFilterElementPredicate <T>();
                    foreach (FilterElement childFilterEl in filterEl.ChildElements)
                    {
                        retVal.AppendChildPredicate(childFilterEl);
                    }
                }
                else
                {
                    IComparable <T> filterValue = TryConvertFilterValue(filterEl.Value) as IComparable <T>;
                    if (filterValue != null)
                    {
                        Func <T, bool> functor = null;
                        switch (filterEl.Type)
                        {
                        case FilterElementType.Equal:
                            functor = delegate(T obj1) { return(filterValue.CompareTo(obj1) == 0); };
                            break;

                        case FilterElementType.NotEqual:
                            functor = delegate(T obj1) { return(filterValue.CompareTo(obj1) != 0); };
                            break;

                        case FilterElementType.Less:
                            functor = delegate(T obj1) { return(filterValue.CompareTo(obj1) > 0); };
                            break;

                        case FilterElementType.LessOrEqual:
                            functor = delegate(T obj1) { return(filterValue.CompareTo(obj1) >= 0); };
                            break;

                        case FilterElementType.Greater:
                            functor = delegate(T obj1) { return(filterValue.CompareTo(obj1) < 0); };
                            break;

                        case FilterElementType.GreaterOrEqual:
                            functor = delegate(T obj1) { return(filterValue.CompareTo(obj1) <= 0); };
                            break;
                        }
                        if (functor != null)
                        {
                            retVal = new FilterElementPredicate <T>(filterEl, functor);
                        }
                    }
                }
            }

            return(retVal);
        }