public override void VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, int index)
        {
            // Remotion.Linq.Clauses.ResultOperators.AggregateFromSeedResultOperator
            // Remotion.Linq.Clauses.ResultOperators.AggregateResultOperator
            // Remotion.Linq.Clauses.ResultOperators.AllResultOperator
            // Remotion.Linq.Clauses.ResultOperators.AnyResultOperator
            // Remotion.Linq.Clauses.ResultOperators.AverageResultOperator
            // Remotion.Linq.Clauses.ResultOperators.CastResultOperator
            // Remotion.Linq.Clauses.ResultOperators.ChoiceResultOperatorBase
            // Remotion.Linq.Clauses.ResultOperators.ContainsResultOperator
            // Remotion.Linq.Clauses.ResultOperators.CountResultOperator
            // Remotion.Linq.Clauses.ResultOperators.DefaultIfEmptyResultOperator
            // Remotion.Linq.Clauses.ResultOperators.DistinctResultOperator
            // Remotion.Linq.Clauses.ResultOperators.ExceptResultOperator
            // Remotion.Linq.Clauses.ResultOperators.FirstResultOperator
            // Remotion.Linq.Clauses.ResultOperators.GroupResultOperator
            // Remotion.Linq.Clauses.ResultOperators.IntersectResultOperator
            // Remotion.Linq.Clauses.ResultOperators.LastResultOperator
            // Remotion.Linq.Clauses.ResultOperators.LongCountResultOperator
            // Remotion.Linq.Clauses.ResultOperators.MaxResultOperator
            // Remotion.Linq.Clauses.ResultOperators.MinResultOperator
            // Remotion.Linq.Clauses.ResultOperators.OfTypeResultOperator
            // Remotion.Linq.Clauses.ResultOperators.ReverseResultOperator
            // Remotion.Linq.Clauses.ResultOperators.SequenceFromSequenceResultOperatorBase
            // Remotion.Linq.Clauses.ResultOperators.SequenceTypePreservingResultOperatorBase
            // Remotion.Linq.Clauses.ResultOperators.SingleResultOperator
            // Remotion.Linq.Clauses.ResultOperators.SkipResultOperator
            // Remotion.Linq.Clauses.ResultOperators.SumResultOperator
            // Remotion.Linq.Clauses.ResultOperators.TakeResultOperator
            // Remotion.Linq.Clauses.ResultOperators.UnionResultOperator
            // Remotion.Linq.Clauses.ResultOperators.ValueFromSequenceResultOperatorBase

            if (resultOperator is CountResultOperator)
            {
                _query.CountPredicate = ODataQueryPart.Count();
            }
            else if (resultOperator is LongCountResultOperator)
            {
                _query.CountPredicate = ODataQueryPart.Count();
            }
            else if (resultOperator is SkipResultOperator)
            {
                var skipOperator = (SkipResultOperator)resultOperator;

                var skipCount = skipOperator.GetConstantCount();

                _query.SkipPredicate = ODataQueryPart.Skip(skipCount);
            }
            else if (resultOperator is TakeResultOperator)
            {
                var takeOperator = (TakeResultOperator)resultOperator;

                var takeCount = takeOperator.GetConstantCount();

                _query.TopPredicate = ODataQueryPart.Top(takeCount);
            }

            base.VisitResultOperator(resultOperator, queryModel, index);
        }
示例#2
0
        protected override SkipQueryPart Parse(string parameterValue)
        {
            int count;

            if (Int32.TryParse(parameterValue, out count) == false)
            {
                throw new ArgumentException(String.Format("Cannot skip '{0}' number of items. '{0}' is not an integar.", parameterValue));
            }

            return(ODataQueryPart.Skip(count));
        }
        public void Translate_SkipThree_ReturnsLastThreeResult()
        {
            var query = new ODataQuery
            {
                SkipPredicate = ODataQueryPart.Skip(3)
            };

            var expression = _translator.Translate <TestModel>(query);

            var fn = (Func <IQueryable <TestModel>, IQueryable <TestModel> >)expression.Compile();

            var result = fn(_source).ToList();

            Assert.That(result.Count, Is.EqualTo(3));
            Assert.That(result[0].TestInt, Is.EqualTo(6));
            Assert.That(result[1].TestInt, Is.EqualTo(7));
            Assert.That(result[2].TestInt, Is.EqualTo(8));
        }