protected override void EndProcessing()
        {
            if (First != null && Second != null)
            {
                var shouldOr  = Operation == SearchOperation.Or;
                var predicate = shouldOr
                    ? PredicateBuilder.False <SearchResultItem>()
                    : PredicateBuilder.True <SearchResultItem>();

                if (shouldOr)
                {
                    var joinedPredicate = First.Or(Second);
                    predicate = predicate.Or(joinedPredicate);
                    WriteObject(predicate, true);
                }
                else
                {
                    var joinedPredicate = First.And(Second);
                    predicate = predicate.And(joinedPredicate);
                    WriteObject(predicate, true);
                }
            }

            if (Criteria != null)
            {
                var predicate = ProcessCriteria(Criteria, Operation);
                if (predicate != null)
                {
                    WriteObject(predicate, true);
                }
            }
        }