src/POData/UriProcessor/QueryProcessor/ExpandProjectionParser/ExpandedProjectionNode.php
/**
     * Remove explicity included nodes which already included implicitly, For
     * an expand navigation property, all immediate properties will be 
     * implicitly selected if that navigation property is the last segment of
     * expand path or if there is a '*' token present after the naivgation 
     * property, this function remove all explicity included 'ProjectionNode's
     * which already included implicitly.
     * 
     * @return void
     */
Remove explicity included nodes which already included implicitly, For
an expand navigation property, all immediate properties will be
implicitly selected if that navigation property is the last segment of
expand path or if there is a '*' token present after the naivgation
property, this function remove all explicity included 'ProjectionNode's
which already included implicitly.

@return void
Remove explicity included nodes which already included implicitly For an expand navigation property all immediate properties will be implicitly selected if that navigation property is the last segment of expand path or if there is a ' * ' token present after the naivgation property this function remove all explicity included ' ProjectionNode ' s which already included implicitly . @return void
public function removeNodesAlreadyIncludedImplicitly()
    {
        if ($this->_selectSubtree) {
            foreach ($this->_childNodes as $propertyName => $node) {
                if ($node instanceof ExpandedProjectionNode) {
                    $node->_selectSubtree = true;
                    $node->removeNodesAlreadyIncludedImplicitly();
                } else {
                    unset($this->_childNodes[$propertyName]);
                }    
            }
            $this->_selectAllImmediateProperties = false;
            return;    
        }
        foreach ($this->_childNodes as $propertyName => $node) {
            if ($node instanceof ExpandedProjectionNode) {
                $node->removeNodesAlreadyIncludedImplicitly();
            } else if ($this->_selectAllImmediateProperties) {
                unset($this->_childNodes[$propertyName]);
            }
        }
    }
public function removeNodesAlreadyIncludedImplicitly ( ) { if ( $ this -> _selectSubtree ) { foreach ( $ this -> _childNodes as $ propertyName => $ node ) { if ( $ node instanceof ExpandedProjectionNode ) { $ node -> _selectSubtree = true ; $ node -> removeNodesAlreadyIncludedImplicitly ( ) ; } else { unset ( $ this -> _childNodes [ $ propertyName ] ) ; } } $ this -> _selectAllImmediateProperties = false ; return ; } foreach ( $ this -> _childNodes as $ propertyName => $ node ) { if ( $ node instanceof ExpandedProjectionNode ) { $ node -> removeNodesAlreadyIncludedImplicitly ( ) ; } else if ( $ this -> _selectAllImmediateProperties ) { unset ( $ this -> _childNodes [ $ propertyName ] ) ; } } }
Remove explicity included nodes which already included implicitly, For
 an expand navigation property, all immediate properties will be
 implicitly selected if that navigation property is the last segment of
 expand path or if there is a '*' token present after the naivgation
 property, this function remove all explicity included 'ProjectionNode's
 which already included implicitly.
Remove explicity included nodes which already included implicitly For an expand navigation property all immediate properties will be implicitly selected if that navigation property is the last segment of expand path or if there is a ' * ' token present after the naivgation property this function remove all explicity included ' ProjectionNode ' s which already included implicitly .
//$select=A/B, A/B/guid, A/B/Name //Here A/B cause to implcilty include all immeiate properties of B //so remove explicitly included 'ProjectionNode' for guid and Name //$select=A/B/*, A/B/guid, A/B/Name //Here A/B/* cause to implcitly include all immediate properties of B //so remove explicitly included 'ProjectionNode' for guid and Name