//Copyright 2010 Microsoft Corporation
//
//Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//
//http://www.apache.org/licenses/LICENSE-2.0
//
//Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
//"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and limitations under the License.
namespace System.Data.Services.Client{
using System;
using System.Diagnostics;
using System.Linq.Expressions;
[DebuggerDisplay("SkipQueryOptionExpression {SkipAmount}")]
internal class SkipQueryOptionExpression : QueryOptionExpression
{
private ConstantExpression skipAmount;
internal SkipQueryOptionExpression(Type type, ConstantExpression skipAmount)
: base((ExpressionType)ResourceExpressionType.SkipQueryOption, type)
{
this.skipAmount = skipAmount;
}
internal ConstantExpression SkipAmount
{
get
{
return this.skipAmount;
}
}
internal override QueryOptionExpression ComposeMultipleSpecification(QueryOptionExpression previous)
{
Debug.Assert(previous != null, "other != null");
Debug.Assert(previous.GetType() == this.GetType(), "other.GetType == this.GetType() -- otherwise it's not the same specification");
Debug.Assert(this.skipAmount != null, "this.skipAmount != null");
Debug.Assert(
this.skipAmount.Type == typeof(int),
"this.skipAmount.Type == typeof(int) -- otherwise it wouldn't have matched the Enumerable.Skip(source, int count) signature");
int thisValue = (int)this.skipAmount.Value;
int previousValue = (int)((SkipQueryOptionExpression)previous).skipAmount.Value;
return new SkipQueryOptionExpression(this.Type, Expression.Constant(thisValue + previousValue, typeof(int)));
}
}
}
|