Remotion.Linq.SqlBackend.MappingResolution.SqlContextExpressionVisitor.VisitUnaryExpression C# (CSharp) Method

VisitUnaryExpression() protected method

protected VisitUnaryExpression ( UnaryExpression expression ) : Expression
expression System.Linq.Expressions.UnaryExpression
return System.Linq.Expressions.Expression
    protected override Expression VisitUnaryExpression (UnaryExpression expression)
    {
      ArgumentUtility.CheckNotNull ("expression", expression);

      var childContext = GetChildSemanticsForUnaryExpression (expression);
      var newOperand = ApplySqlExpressionContext (expression.Operand, childContext);

      if (newOperand != expression.Operand)
      {
        if (expression.NodeType == ExpressionType.Convert)
        {
          // If this is a convert of a SqlConvertedBooleanExpression to bool? or bool, move the Convert into the SqlConvertedBooleanExpression
          var convertedBooleanExpressionOperand = newOperand as SqlConvertedBooleanExpression;
          if (convertedBooleanExpressionOperand != null)
          {
            if (expression.Type == typeof (bool))
              return new SqlConvertedBooleanExpression (Expression.Convert (convertedBooleanExpressionOperand.Expression, typeof (int)));
            else if (expression.Type == typeof (bool?))
              return new SqlConvertedBooleanExpression (Expression.Convert (convertedBooleanExpressionOperand.Expression, typeof (int?)));
          }
        }

        return Expression.MakeUnary (expression.NodeType, newOperand, expression.Type, expression.Method);
      }

      return expression;
    }