public override OeSelectItem Translate(ExpandedNavigationSelectItem item) { if (_navigationNextLink && Cache.UriCompare.OeComparerExtension.GetNavigationNextLink(item)) { return(null); } Type itemType; IEdmNavigationProperty navigationProperty = (((NavigationPropertySegment)item.PathToNavigationProperty.LastSegment).NavigationProperty); OeSelectItem navigationItem = _navigationItem.FindChildrenNavigationItem(navigationProperty); if (navigationItem == null) { navigationItem = new OeSelectItem(_navigationItem, item, _skipToken); _navigationItem.AddNavigationItem(navigationItem); Expression innerSource = GetInnerSource(navigationItem, item); _source = _joinBuilder.Build(_source, innerSource, _navigationItem.GetJoinPath(), navigationProperty); itemType = OeExpressionHelper.GetCollectionItemType(innerSource.Type); } else { itemType = _visitor.EdmModel.GetClrType(navigationItem.EntitySet.EntityType()); } var selectTranslator = new OeSelectTranslator(_joinBuilder, navigationItem); _source = selectTranslator.BuildSelect(item.SelectAndExpand, _source, _navigationNextLink, _skipToken); return(navigationItem); }
private Expression BuildJoin(Expression source, IList <OeNavigationSelectItem> navigationItems) { for (int i = 1; i < navigationItems.Count; i++) { if (!navigationItems[i].AlreadyUsedInBuildExpression) { navigationItems[i].AlreadyUsedInBuildExpression = true; ODataPathSegment segment = navigationItems[i].NavigationSelectItem.PathToNavigationProperty.LastSegment; IEdmNavigationProperty navigationProperty = (((NavigationPropertySegment)segment).NavigationProperty); Expression innerSource = GetInnerSource(navigationItems[i]); source = _joinBuilder.Build(_edmModel, source, innerSource, navigationItems[i].Parent.GetJoinPath(), navigationProperty); } } _joinBuilder.Visitor.ChangeParameterType(source); return(source); }
private Expression BuildJoin(Expression source, IList <OeNavigationSelectItem> navigationItems) { for (int i = 1; i < navigationItems.Count; i++) { OeNavigationSelectItem navigationItem = navigationItems[i]; if (navigationItem.Parent == null) { throw new InvalidOperationException("Parent is null must be first element in " + nameof(navigationItems)); } if (!navigationItem.AlreadyUsedInBuildExpression) { navigationItem.AlreadyUsedInBuildExpression = true; ODataPathSegment segment = navigationItem.NavigationSelectItem.PathToNavigationProperty.LastSegment; IEdmNavigationProperty navigationProperty = (((NavigationPropertySegment)segment).NavigationProperty); Expression innerSource = GetInnerSource(navigationItem); source = _joinBuilder.Build(_edmModel, source, innerSource, navigationItem.Parent.GetJoinPath(), navigationProperty); } } _joinBuilder.Visitor.ChangeParameterType(source); return(source); }