Esempio n. 1
0
        public static Expression <Func <TEntity, bool> > Parse <TEntity>(IDataFilter dataFilter, DataFilterMetaInfo filterInfo, Expression node)
        {
            ObjectChecker.CheckNotNull(filterInfo);
            var filterFields = filterInfo.FilterFields;

            if (filterFields.Count == 0)
            {
                return((Expression <Func <TEntity, bool> >)node);
            }

            // filter
            var body = node;

            foreach (var filterField in filterFields)
            {
                var handler = FilterFieldHandlerFactory.GetHandler(filterField.FilterFieldType);
                if (handler != null)
                {
                    // call FilterFieldHandler
                    body = handler.Handle(body, filterField);
                }
            }

            // 删除 {True}
            var optimizer = new ExprTreeOptimizer(body);

            body = optimizer.Optimize();
            return(body as Expression <Func <TEntity, bool> >);
        }
Esempio n. 2
0
 public static void ShoutDown()
 {
     FilterFieldHandlerFactory.Clear();
     FieldExprNameMappingFactory.Clear();
     GC.Collect();
 }
Esempio n. 3
0
 internal static void Reset()
 {
     FilterFieldHandlerFactory.Reset();
     FieldExprNameMappingFactory.Clear();
 }
Esempio n. 4
0
 /// <summary>
 /// Add 一个自定义字段的处理Handler
 /// </summary>
 /// <typeparam name="TFilterFieldHandler"></typeparam>
 /// <param name="filterFiledHandlerFunc"></param>
 public static void AddFilterFieldHandler <TFilterFieldHandler>(Func <TFilterFieldHandler> filterFiledHandlerFunc)
     where TFilterFieldHandler : class, IFilterFieldHandler
 {
     FilterFieldHandlerFactory.Register(filterFiledHandlerFunc);
 }