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> >); }
public static void ShoutDown() { FilterFieldHandlerFactory.Clear(); FieldExprNameMappingFactory.Clear(); GC.Collect(); }
internal static void Reset() { FilterFieldHandlerFactory.Reset(); FieldExprNameMappingFactory.Clear(); }
/// <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); }