private SqlExpression ApplyTypeMappingOnSqlUnary( SqlUnaryExpression sqlUnaryExpression, CoreTypeMapping typeMapping) { SqlExpression operand; CoreTypeMapping resultTypeMapping; switch (sqlUnaryExpression.OperatorType) { case ExpressionType.Equal: case ExpressionType.NotEqual: case ExpressionType.Not: resultTypeMapping = _boolTypeMapping; operand = ApplyDefaultTypeMapping(sqlUnaryExpression.Operand); break; case ExpressionType.Convert: resultTypeMapping = typeMapping; operand = ApplyDefaultTypeMapping(sqlUnaryExpression.Operand); break; case ExpressionType.Negate: resultTypeMapping = typeMapping; operand = ApplyTypeMapping(sqlUnaryExpression.Operand, typeMapping); break; default: throw new InvalidOperationException(CoreStrings.TranslationFailed(sqlUnaryExpression.Print())); } return(new SqlUnaryExpression( sqlUnaryExpression.OperatorType, operand, sqlUnaryExpression.Type, resultTypeMapping)); }
private SqlExpression ApplyTypeMappingOnSqlUnary( SqlUnaryExpression sqlUnaryExpression, CoreTypeMapping typeMapping) { SqlExpression operand; Type resultType; CoreTypeMapping resultTypeMapping; switch (sqlUnaryExpression.OperatorType) { case ExpressionType.Equal: case ExpressionType.NotEqual: case ExpressionType.Not when sqlUnaryExpression.IsLogicalNot(): { resultTypeMapping = _boolTypeMapping; resultType = typeof(bool); operand = ApplyDefaultTypeMapping(sqlUnaryExpression.Operand); break; } case ExpressionType.Convert: resultTypeMapping = typeMapping; // Since we are applying convert, resultTypeMapping decides the clrType resultType = resultTypeMapping?.ClrType ?? sqlUnaryExpression.Type; operand = ApplyDefaultTypeMapping(sqlUnaryExpression.Operand); break; case ExpressionType.Not: case ExpressionType.Negate: resultTypeMapping = typeMapping; // While Not is logical, negate is numeric hence we use clrType from TypeMapping resultType = resultTypeMapping?.ClrType ?? sqlUnaryExpression.Type; operand = ApplyTypeMapping(sqlUnaryExpression.Operand, typeMapping); break; default: throw new InvalidOperationException(CoreStrings.TranslationFailed(sqlUnaryExpression.Print())); } return(new SqlUnaryExpression(sqlUnaryExpression.OperatorType, operand, resultType, resultTypeMapping)); }