private static Expression BuildOrderBySkipToken(OeSelectItem navigationItem, OrderByClause orderByClause, Expression source, OeJoinBuilder joinBuilder, bool hasSelectItems) { while (orderByClause != null) { var propertyNode = (SingleValuePropertyAccessNode)orderByClause.Expression; if (propertyNode.Source is SingleNavigationNode navigationNode) { OeSelectItem match = null; ExpandedNavigationSelectItem navigationSelectItem = null; do { if ((match = navigationItem.FindHierarchyNavigationItem(navigationNode.NavigationProperty)) != null) { match.AddSelectItem(new OeSelectItem(propertyNode.Property, true)); break; } SelectExpandClause selectExpandClause; if (navigationSelectItem == null) { var pathSelectItem = new PathSelectItem(new ODataSelectPath(new PropertySegment((IEdmStructuralProperty)propertyNode.Property))); selectExpandClause = new SelectExpandClause(new[] { pathSelectItem }, false); } else { selectExpandClause = new SelectExpandClause(new[] { navigationSelectItem }, false); } var segment = new NavigationPropertySegment(navigationNode.NavigationProperty, navigationNode.NavigationSource); navigationSelectItem = new ExpandedNavigationSelectItem(new ODataExpandPath(segment), navigationNode.NavigationSource, selectExpandClause); }while ((navigationNode = navigationNode.Source as SingleNavigationNode) != null); if (navigationSelectItem != null) { if (match == null) { match = navigationItem; } var selectItemTranslator = new OeSelectItemTranslator(match, false, source, joinBuilder, true); navigationSelectItem.TranslateWith(selectItemTranslator); source = selectItemTranslator.Source; } } else { if (hasSelectItems) { navigationItem.AddSelectItem(new OeSelectItem(propertyNode.Property, true)); } } orderByClause = orderByClause.ThenBy; } return(source); }
public void ExpandedNavigationPropertySelectItemIsNotImplemented() { FakeTranslator translator = new FakeTranslator(); ExpandedNavigationSelectItem item = new ExpandedNavigationSelectItem(new ODataExpandPath() { new NavigationPropertySegment(ModelBuildingHelpers.BuildValidNavigationProperty(), ModelBuildingHelpers.BuildValidEntitySet()) }, null, null); Action visitExpandedNavigationSelectItem = () => item.TranslateWith(translator); visitExpandedNavigationSelectItem.ShouldThrow <NotImplementedException>(); }