private Expression BuildSkipTakeSource(Expression source, OeSkipTokenNameValue[] skipTokenNameValues, bool isDatabaseNullHighestValue) { BuildOrderBySkipTake(_rootNavigationItem, _odataUri.OrderBy, HasSelectItems(_odataUri.SelectAndExpand)); source = BuildJoin(source, new OeNavigationSelectItem[] { _rootNavigationItem }); long?top = GetTop(_rootNavigationItem, _odataUri.Top); if (top == null && _odataUri.Skip == null) { return(source); } var expressionBuilder = new OeExpressionBuilder(_joinBuilder); source = expressionBuilder.ApplySkipToken(source, skipTokenNameValues, _odataUri.OrderBy, isDatabaseNullHighestValue); source = expressionBuilder.ApplyOrderBy(source, _odataUri.OrderBy); source = expressionBuilder.ApplySkip(source, _odataUri.Skip, _odataUri.Path); return(expressionBuilder.ApplyTake(source, top, _odataUri.Path)); bool HasSelectItems(SelectExpandClause selectExpandClause) { if (selectExpandClause != null) { foreach (SelectItem odataSelectItem in selectExpandClause.SelectedItems) { if (odataSelectItem is PathSelectItem pathSelectItem && pathSelectItem.SelectedPath.LastSegment is PropertySegment) { return(true); } } } return(false); } }
private static Expression BuildSkipTakeSource(Expression source, OeQueryContext queryContext, OeSelectItem navigationItem) { bool hasSelectItems = HasSelectItems(queryContext.ODataUri.SelectAndExpand); source = BuildOrderBySkipToken(navigationItem, queryContext.ODataUri.OrderBy, source, queryContext.JoinBuilder, hasSelectItems); queryContext.JoinBuilder.Visitor.ChangeParameterType(source); var expressionBuilder = new OeExpressionBuilder(queryContext.JoinBuilder); source = expressionBuilder.ApplySkipToken(source, queryContext.SkipTokenNameValues, queryContext.ODataUri.OrderBy, queryContext.IsDatabaseNullHighestValue); source = expressionBuilder.ApplyOrderBy(source, queryContext.ODataUri.OrderBy); source = expressionBuilder.ApplySkip(source, queryContext.ODataUri.Skip, queryContext.ODataUri.Path); return(expressionBuilder.ApplyTake(source, queryContext.ODataUri.Top, queryContext.ODataUri.Path)); }
private Expression BuildSkipTakeSource(Expression source, OeSkipTokenNameValue[] skipTokenNameValues, bool isDatabaseNullHighestValue) { BuildOrderBySkipTake(_rootNavigationItem, _odataUri.OrderBy, HasSelectItems(_odataUri.SelectAndExpand)); source = BuildJoin(source, new OeNavigationSelectItem[] { _rootNavigationItem }); long?top = GetTop(_rootNavigationItem, _odataUri.Top); if (top == null && _odataUri.Skip == null) { return(source); } var expressionBuilder = new OeExpressionBuilder(_joinBuilder); source = expressionBuilder.ApplySkipToken(source, skipTokenNameValues, _odataUri.OrderBy, isDatabaseNullHighestValue); source = expressionBuilder.ApplyOrderBy(source, _odataUri.OrderBy); source = expressionBuilder.ApplySkip(source, _odataUri.Skip, _odataUri.Path); return(expressionBuilder.ApplyTake(source, top, _odataUri.Path));