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

AddMilliseconds() private method

private AddMilliseconds ( Expression milliseconds, Expression dateTime ) : Expression
milliseconds System.Linq.Expressions.Expression
dateTime System.Linq.Expressions.Expression
return System.Linq.Expressions.Expression
    private Expression AddMilliseconds (Expression milliseconds, Expression dateTime)
    {
      // Convert milliseconds value to long first (truncating).
      if (milliseconds.Type != typeof (long))
        milliseconds = new SqlConvertExpression (typeof (long), milliseconds);

      // Add milliseconds in two steps: extract the days and add them as a "day" value, then add the remaining milliseconds as a "milliseconds" value.
      // This two-step part is required because SQL Server can only add 32-bit INTs using DATEADD, no BIGINTs. The milliseconds in a day (86,400,000) 
      // fit into an INT. The second INT for days can express up to +/- 2^31 (or so) days, which equals about five million years. This is much
      // more than a SQL DATETIME can hold.
      var days = Expression.Divide (milliseconds, new SqlLiteralExpression (TimeSpan.TicksPerDay / TimeSpan.TicksPerMillisecond));
      var remainingMilliseconds = Expression.Modulo (milliseconds, new SqlLiteralExpression (TimeSpan.TicksPerDay / TimeSpan.TicksPerMillisecond));
      return AddUnits (remainingMilliseconds, "millisecond", AddUnits (days, "day", dateTime));
    }