Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }