Remotion.Linq.SqlBackend.SqlPreparation.MethodCallTransformers.DateTimeAddMethodCallTransformer.Transform C# (CSharp) Method

Transform() public method

public Transform ( MethodCallExpression methodCallExpression ) : Expression
methodCallExpression System.Linq.Expressions.MethodCallExpression
return System.Linq.Expressions.Expression
    public Expression Transform (MethodCallExpression methodCallExpression)
    {
      ArgumentUtility.CheckNotNull ("methodCallExpression", methodCallExpression);

      MethodCallTransformerUtility.CheckArgumentCount (methodCallExpression, 1);
      MethodCallTransformerUtility.CheckInstanceMethod (methodCallExpression);

      switch (methodCallExpression.Method.Name)
      {
        case "Add":
          Trace.Assert (methodCallExpression.Method.Name == "Add");
          var constantTimeSpanExpression = methodCallExpression.Arguments[0] as ConstantExpression;
          if (constantTimeSpanExpression == null)
          {
            var message =
                string.Format (
                    "The method 'System.DateTime.Add' can only be transformed to SQL when its argument is a constant value. Expression: '{0}'.",
                    FormattingExpressionTreeVisitor.Format (methodCallExpression));
            throw new NotSupportedException (message);
          }

          return AddTimeSpan ((TimeSpan) constantTimeSpanExpression.Value, methodCallExpression.Object);
        case "AddDays":
          return AddWithConversion (
              methodCallExpression.Arguments[0], TimeSpan.TicksPerDay / TimeSpan.TicksPerMillisecond, methodCallExpression.Object);
        case "AddHours":
          return AddWithConversion (
              methodCallExpression.Arguments[0], TimeSpan.TicksPerHour / TimeSpan.TicksPerMillisecond, methodCallExpression.Object);
        case "AddMilliseconds":
          return AddMilliseconds (methodCallExpression.Arguments[0], methodCallExpression.Object);
        case "AddMinutes":
          return AddWithConversion (
              methodCallExpression.Arguments[0], TimeSpan.TicksPerMinute / TimeSpan.TicksPerMillisecond, methodCallExpression.Object);
        case "AddMonths":
          return AddUnits (methodCallExpression.Arguments[0], "month", methodCallExpression.Object);
        case "AddSeconds":
          return AddWithConversion (
              methodCallExpression.Arguments[0], TimeSpan.TicksPerSecond / TimeSpan.TicksPerMillisecond, methodCallExpression.Object);
        case "AddTicks":
          return AddTicks (methodCallExpression.Arguments[0], methodCallExpression.Object);
        case "AddYears":
          return AddUnits (methodCallExpression.Arguments[0], "year", methodCallExpression.Object);
        default:
          var argumentExceptionMessage = string.Format (
              "The method '{0}.{1}' is not a supported method.", methodCallExpression.Method.DeclaringType, methodCallExpression.Method.Name);
          throw new ArgumentException (argumentExceptionMessage, "methodCallExpression");
      }
    }