internal QueryFilterOperator AddHandler <TLhs, TRhs>(Func <FilterOperatorContext, TLhs, TRhs, StringComparison, bool> handler) { if (!valid) { return(this); } var leftHandSideType = typeof(TLhs); var rightHandSideType = typeof(TRhs); if (!handlers.ContainsKey(typeof(TLhs))) { handlers.Add(typeof(TLhs), new Dictionary <Type, IFilterHandlerDelegate>()); } var filterHandlerDelegate = new FilterHandlerDelegate <TLhs, TRhs>(handler); var handlersByLeftHandSideType = handlers[leftHandSideType]; if (handlersByLeftHandSideType.ContainsKey(rightHandSideType)) { handlersByLeftHandSideType[rightHandSideType] = filterHandlerDelegate; } else { handlersByLeftHandSideType.Add(rightHandSideType, filterHandlerDelegate); } m_EngineImplementation.AddFilterOperationGenerator <TRhs>(); // Enums are user defined but still simple enough to generate a parse function for them. if (typeof(TRhs).IsEnum) { m_EngineImplementation.AddDefaultEnumTypeParser <TRhs>(); } return(this); }
public FilterOperator AddHandler <TLhs, TRhs>(Func <TLhs, TRhs, StringComparison, bool> handler) { var operatorTypes = new FilterOperatorTypes(typeof(TLhs), typeof(TRhs)); if (handlers.ContainsKey(operatorTypes)) { handlers[operatorTypes] = handler; } else { handlers.Add(operatorTypes, handler); } m_EngineImplementation.AddFilterOperationGenerator <TRhs>(); return(this); }
public FilterOperator AddHandler <TLhs, TRhs>(Func <TLhs, TRhs, StringComparison, bool> handler) { var leftHandSideType = typeof(TLhs); var rightHandSideType = typeof(TRhs); if (!handlers.ContainsKey(typeof(TLhs))) { handlers.Add(typeof(TLhs), new Dictionary <Type, IFilterHandlerDelegate>()); } var filterHandlerDelegate = new FilterHandlerDelegate <TLhs, TRhs>(handler); var handlersByLeftHandSideType = handlers[leftHandSideType]; if (handlersByLeftHandSideType.ContainsKey(rightHandSideType)) { handlersByLeftHandSideType[rightHandSideType] = filterHandlerDelegate; } else { handlersByLeftHandSideType.Add(rightHandSideType, filterHandlerDelegate); } m_EngineImplementation.AddFilterOperationGenerator <TRhs>(); return(this); }