protected override IBuildContext BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) { var sequence = builder.BuildSequence(new BuildInfo(buildInfo, methodCall.Arguments[0])); var arg = methodCall.Arguments[1].Unwrap(); ISqlExpression expr; var parameterize = Common.Configuration.Linq.ParameterizeTakeSkip; if (arg.NodeType == ExpressionType.Lambda) { arg = ((LambdaExpression)arg).Body.Unwrap(); expr = builder.ConvertToSql(sequence, arg); } else { // revert unwrap arg = methodCall.Arguments[1]; expr = builder.ConvertToSql(sequence, arg); if (expr.ElementType == QueryElementType.SqlValue) { var param = builder.BuildParameter(methodCall.Arguments[1], null, true).SqlParameter; param.Name = methodCall.Method.Name == "Take" ? "take" : "skip"; param.IsQueryParameter = param.IsQueryParameter && parameterize; expr = param; } } if (methodCall.Method.Name == "Take") { TakeHints?hints = null; if (methodCall.Arguments.Count == 3 && methodCall.Arguments[2].Type == typeof(TakeHints)) { hints = (TakeHints)methodCall.Arguments[2].EvaluateExpression() !; } BuildTake(builder, sequence, expr, hints); } else { BuildSkip(builder, sequence, expr); } return(sequence); }