public function canBeFilteredByRepository()
    {
        // If the collection can't be filtered entirely by the repos, OR any of the aggregates
        // can't be calculated by the repos, we can't perform the intersection (as the intersection itself
        // depends critically on the rows selected).

        $filter = $this->getFilter();
        $repository = $this->getRepository();

        if ($filter && !$filter->canFilterWithRepository($this, $repository)){
            return false;
        }

        foreach($this->getAggregateColumns() as $aggregateColumn){
            if (!$aggregateColumn->canAggregateWithRepository($repository, $this)){
                return false;
            }
        }

        return true;
    }