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;
}