/// <summary> /// Process a <see cref="SelectTermToken"/> to identify whether it's a Wildcard path. /// </summary> /// <param name="selectToken">the select token to process.</param> /// <param name="newSelectItem">the built select item to out.</param> /// <returns>A boolean value indicates the result of processing wildcard token path.</returns> private bool ProcessWildcardTokenPath(SelectTermToken selectToken, out SelectItem newSelectItem) { newSelectItem = null; if (selectToken == null || selectToken.PathToProperty == null) { return(false); } PathSegmentToken pathToken = selectToken.PathToProperty; if (SelectPathSegmentTokenBinder.TryBindAsWildcard(pathToken, this.Model, out newSelectItem)) { // * or Namespace.* if (pathToken.NextToken != null) { throw new ODataException(ODataErrorStrings.SelectExpandBinder_InvalidIdentifierAfterWildcard(pathToken.NextToken.Identifier)); } VerifyNoQueryOptionsNested(selectToken, pathToken.Identifier); return(true); } return(false); }
/// <summary> /// Visit a NonSystemToken /// </summary> /// <param name="tokenIn">the non sytem token to visit</param> public override void Visit(NonSystemToken tokenIn) { ExceptionUtils.CheckArgumentNotNull(tokenIn, "tokenIn"); // before looking for type segments or paths, handle both of the wildcard cases. if (tokenIn.NextToken == null) { SelectItem newSelectItem; if (SelectPathSegmentTokenBinder.TryBindAsWildcard(tokenIn, this.model, out newSelectItem)) { this.expandClauseToDecorate.AddToSelectedItems(newSelectItem); return; } } this.ProcessTokenAsPath(tokenIn); }