protected QueryFilter SinglePropertySmartFilterToNativeFilter(QueryFilter filter, PropertyDefinition nativeProperty)
        {
            MultivaluedInstanceComparisonFilter multivaluedInstanceComparisonFilter = filter as MultivaluedInstanceComparisonFilter;

            if (multivaluedInstanceComparisonFilter != null)
            {
                return(new MultivaluedInstanceComparisonFilter(multivaluedInstanceComparisonFilter.ComparisonOperator, nativeProperty, multivaluedInstanceComparisonFilter.PropertyValue));
            }
            ComparisonFilter comparisonFilter = filter as ComparisonFilter;

            if (comparisonFilter != null)
            {
                return(new ComparisonFilter(comparisonFilter.ComparisonOperator, nativeProperty, comparisonFilter.PropertyValue));
            }
            ExistsFilter existsFilter = filter as ExistsFilter;

            if (existsFilter != null)
            {
                return(new ExistsFilter(nativeProperty));
            }
            TextFilter textFilter = filter as TextFilter;

            if (textFilter != null)
            {
                return(new TextFilter(nativeProperty, textFilter.Text, textFilter.MatchOptions, textFilter.MatchFlags));
            }
            BitMaskFilter bitMaskFilter = filter as BitMaskFilter;

            if (bitMaskFilter != null)
            {
                return(new BitMaskFilter(nativeProperty, bitMaskFilter.Mask, bitMaskFilter.IsNonZero));
            }
            BitMaskAndFilter bitMaskAndFilter = filter as BitMaskAndFilter;

            if (bitMaskAndFilter != null)
            {
                return(new BitMaskAndFilter(nativeProperty, bitMaskAndFilter.Mask));
            }
            BitMaskOrFilter bitMaskOrFilter = filter as BitMaskOrFilter;

            if (bitMaskOrFilter != null)
            {
                return(new BitMaskOrFilter(nativeProperty, bitMaskOrFilter.Mask));
            }
            throw this.CreateInvalidFilterConversionException(filter);
        }
        protected QueryFilter SinglePropertyNativeFilterToSmartFilter(QueryFilter filter, PropertyDefinition nativeProperty)
        {
            SinglePropertyFilter singlePropertyFilter = filter as SinglePropertyFilter;

            if (singlePropertyFilter != null && singlePropertyFilter.Property.Equals(nativeProperty))
            {
                MultivaluedInstanceComparisonFilter multivaluedInstanceComparisonFilter = filter as MultivaluedInstanceComparisonFilter;
                if (multivaluedInstanceComparisonFilter != null)
                {
                    return(new MultivaluedInstanceComparisonFilter(multivaluedInstanceComparisonFilter.ComparisonOperator, this, multivaluedInstanceComparisonFilter.PropertyValue));
                }
                ComparisonFilter comparisonFilter = filter as ComparisonFilter;
                if (comparisonFilter != null)
                {
                    return(new ComparisonFilter(comparisonFilter.ComparisonOperator, this, comparisonFilter.PropertyValue));
                }
                ExistsFilter existsFilter = filter as ExistsFilter;
                if (existsFilter != null)
                {
                    return(new ExistsFilter(this));
                }
                TextFilter textFilter = filter as TextFilter;
                if (textFilter != null)
                {
                    return(new TextFilter(this, textFilter.Text, textFilter.MatchOptions, textFilter.MatchFlags));
                }
                BitMaskFilter bitMaskFilter = filter as BitMaskFilter;
                if (bitMaskFilter != null)
                {
                    return(new BitMaskFilter(this, bitMaskFilter.Mask, bitMaskFilter.IsNonZero));
                }
                BitMaskAndFilter bitMaskAndFilter = filter as BitMaskAndFilter;
                if (bitMaskAndFilter != null)
                {
                    return(new BitMaskAndFilter(this, bitMaskAndFilter.Mask));
                }
                BitMaskOrFilter bitMaskOrFilter = filter as BitMaskOrFilter;
                if (bitMaskOrFilter != null)
                {
                    return(new BitMaskOrFilter(this, bitMaskOrFilter.Mask));
                }
            }
            return(null);
        }