/**
  * Builds filter expression
  * 
  * @param Filter $filter The filter object
  * @param string &$e     The filter expression
  * 
  * @return string
  */
 private function _buildFilterExpressionRec($filter, &$e)
 {
     if (is_null($filter)) {
         return;
     }
     if ($filter instanceof PropertyNameFilter) {
         $e .= $filter->getPropertyName();
     } else {
         if ($filter instanceof ConstantFilter) {
             $value = $filter->getValue();
             // If the value is null we just append null regardless of the edmType.
             if (is_null($value)) {
                 $e .= 'null';
             } else {
                 $type = $filter->getEdmType();
                 $e .= EdmType::serializeQueryValue($type, $value);
             }
         } else {
             if ($filter instanceof UnaryFilter) {
                 $e .= $filter->getOperator();
                 $e .= '(';
                 $this->_buildFilterExpressionRec($filter->getOperand(), $e);
                 $e .= ')';
             } else {
                 if ($filter instanceof Filters\BinaryFilter) {
                     $e .= '(';
                     $this->_buildFilterExpressionRec($filter->getLeft(), $e);
                     $e .= ' ';
                     $e .= $filter->getOperator();
                     $e .= ' ';
                     $this->_buildFilterExpressionRec($filter->getRight(), $e);
                     $e .= ')';
                 } else {
                     if ($filter instanceof QueryStringFilter) {
                         $e .= $filter->getQueryString();
                     }
                 }
             }
         }
     }
     return $e;
 }