private static Restriction BuildRestriction(QueryFilter filter, IFilterBuilderHelper helper)
        {
            CompositeFilter compositeFilter = filter as CompositeFilter;

            if (compositeFilter != null)
            {
                Restriction[] array = new Restriction[compositeFilter.FilterCount];
                int           num   = 0;
                foreach (QueryFilter filter2 in compositeFilter.Filters)
                {
                    array[num++] = ContentFilterBuilder.BuildRestriction(filter2, helper);
                }
                if (compositeFilter is AndFilter)
                {
                    return(Restriction.And(array));
                }
                if (compositeFilter is OrFilter)
                {
                    return(Restriction.Or(array));
                }
                throw ContentFilterBuilder.UnexpectedFilterType(filter);
            }
            else
            {
                NotFilter notFilter = filter as NotFilter;
                if (notFilter != null)
                {
                    return(Restriction.Not(ContentFilterBuilder.BuildRestriction(notFilter.Filter, helper)));
                }
                SinglePropertyFilter singlePropertyFilter = filter as SinglePropertyFilter;
                if (singlePropertyFilter == null)
                {
                    throw ContentFilterBuilder.UnexpectedFilterType(filter);
                }
                ContentFilterSchema.ContentFilterPropertyDefinition contentFilterPropertyDefinition = singlePropertyFilter.Property as ContentFilterSchema.ContentFilterPropertyDefinition;
                if (contentFilterPropertyDefinition == null)
                {
                    throw ContentFilterBuilder.UnexpectedFilterType(filter);
                }
                return(contentFilterPropertyDefinition.ConvertToRestriction(singlePropertyFilter, helper));
            }
        }
        private static Restriction BuildComparisonRestriction(ComparisonFilter filter, PropTag ptagToSearch, object propValue)
        {
            Restriction.PropertyRestriction propertyRestriction;
            switch (filter.ComparisonOperator)
            {
            case ComparisonOperator.Equal:
                propertyRestriction = (Restriction.PropertyRestriction)Restriction.EQ(ptagToSearch, propValue);
                break;

            case ComparisonOperator.NotEqual:
                propertyRestriction = (Restriction.PropertyRestriction)Restriction.NE(ptagToSearch, propValue);
                break;

            case ComparisonOperator.LessThan:
                propertyRestriction = (Restriction.PropertyRestriction)Restriction.LT(ptagToSearch, propValue);
                break;

            case ComparisonOperator.LessThanOrEqual:
                propertyRestriction = (Restriction.PropertyRestriction)Restriction.LE(ptagToSearch, propValue);
                break;

            case ComparisonOperator.GreaterThan:
                propertyRestriction = (Restriction.PropertyRestriction)Restriction.GT(ptagToSearch, propValue);
                break;

            case ComparisonOperator.GreaterThanOrEqual:
                propertyRestriction = (Restriction.PropertyRestriction)Restriction.GE(ptagToSearch, propValue);
                break;

            default:
                throw ContentFilterBuilder.UnexpectedFilterType(filter);
            }
            if (ptagToSearch.IsMultiValued())
            {
                propertyRestriction.MultiValued = true;
            }
            return(propertyRestriction);
        }
        private static object GetPropertyValue(QueryFilter filter)
        {
            TextFilter textFilter = filter as TextFilter;

            if (textFilter != null)
            {
                return(textFilter.Text);
            }
            ComparisonFilter comparisonFilter = filter as ComparisonFilter;

            if (comparisonFilter == null)
            {
                throw ContentFilterBuilder.UnexpectedFilterType(filter);
            }
            object obj = comparisonFilter.PropertyValue;

            if (obj == null)
            {
                return(null);
            }
            if (obj is DateTime)
            {
                obj = ((DateTime)obj).ToUniversalTime();
            }
            else if (obj is ByteQuantifiedSize)
            {
                obj = (int)((ulong)((ByteQuantifiedSize)obj));
            }
            else if (obj is CultureInfo)
            {
                obj = ((CultureInfo)obj).LCID;
            }
            else if (obj.GetType().IsEnum)
            {
                obj = (int)obj;
            }
            return(obj);
        }
        private static Restriction BuildMessageKindRestrictionInternal(SinglePropertyFilter filter, IFilterBuilderHelper mapper, PropTag ptagToSearch)
        {
            List <string> list = new List <string>();
            bool          flag;

            ContentFilterBuilder.CheckFilterIsEQorNE(filter, out flag);
            switch ((MessageKindEnum)ContentFilterBuilder.GetPropertyValue(filter))
            {
            case MessageKindEnum.Email:
                list.Add("IPM.Note");
                break;

            case MessageKindEnum.Calendar:
                list.Add("IPM.Schedule");
                list.Add("IPM.Appointment");
                break;

            case MessageKindEnum.Task:
                list.Add("IPM.Task");
                break;

            case MessageKindEnum.Note:
                list.Add("IPM.StickyNote");
                break;

            case MessageKindEnum.Doc:
                list.Add("IPM.Document");
                break;

            case MessageKindEnum.Journal:
                list.Add("IPM.Activity");
                break;

            case MessageKindEnum.Contact:
                list.Add("IPM.Contact");
                break;

            case MessageKindEnum.InstantMessage:
                list.Add("IPM.Note.Microsoft.Conversation");
                list.Add("IPM.Note.Microsoft.Missed");
                list.Add("IPM.Note.Microsoft.Conversation.Voice");
                list.Add("IPM.Note.Microsoft.Missed.Voice");
                break;

            case MessageKindEnum.Voicemail:
                list.Add("IPM.Note.Microsoft.Voicemail");
                break;

            case MessageKindEnum.Fax:
                list.Add("IPM.Note.Microsoft.Fax");
                break;

            case MessageKindEnum.Post:
                list.Add("IPM.Post");
                break;

            case MessageKindEnum.RSSFeed:
                list.Add("IPM.Post.RSS");
                break;

            default:
                throw ContentFilterBuilder.UnexpectedFilterType(filter);
            }
            Restriction[] array = new Restriction[list.Count];
            for (int i = 0; i < list.Count; i++)
            {
                array[i] = Restriction.EQ(ptagToSearch, list[i]);
            }
            Restriction restriction = (array.Length == 1) ? array[0] : Restriction.Or(array);

            if (!flag)
            {
                return(restriction);
            }
            return(Restriction.Not(restriction));
        }