public Expression Transform (MethodCallExpression methodCallExpression)
{
ArgumentUtility.CheckNotNull ("methodCallExpression", methodCallExpression);
MethodCallTransformerUtility.CheckArgumentCount (methodCallExpression, 1, 2);
MethodCallTransformerUtility.CheckInstanceMethod (methodCallExpression);
var startIndexExpression = Expression.Add (methodCallExpression.Arguments[0], new SqlLiteralExpression (1));
if (methodCallExpression.Arguments.Count == 1)
{
return new SqlFunctionExpression (
methodCallExpression.Type,
"SUBSTRING",
methodCallExpression.Object,
startIndexExpression,
new SqlLengthExpression (methodCallExpression.Object));
}
else if (methodCallExpression.Arguments.Count == 2)
{
return new SqlFunctionExpression (
methodCallExpression.Type,
"SUBSTRING",
methodCallExpression.Object,
startIndexExpression,
methodCallExpression.Arguments[1]);
}
else
{
var message = string.Format (
"Substring function with {0} arguments is not supported. Expression: '{1}'",
methodCallExpression.Arguments.Count,
FormattingExpressionTreeVisitor.Format (methodCallExpression));
throw new NotSupportedException (message);
}
}
}