diff --git a/src/EFCore.Relational/Query/SqlNullabilityProcessor.cs b/src/EFCore.Relational/Query/SqlNullabilityProcessor.cs index fe23e7f94fe..fb7bc9e8c60 100644 --- a/src/EFCore.Relational/Query/SqlNullabilityProcessor.cs +++ b/src/EFCore.Relational/Query/SqlNullabilityProcessor.cs @@ -1422,12 +1422,33 @@ protected virtual SqlExpression VisitSqlFunction( foreach (var argument in sqlFunctionExpression.Arguments) { coalesceArguments.Add(Visit(argument, out var argumentNullable)); - coalesceNullable = coalesceNullable && argumentNullable; + if (!argumentNullable) + { + coalesceNullable = false; + break; + } } nullable = coalesceNullable; - return sqlFunctionExpression.Update(sqlFunctionExpression.Instance, coalesceArguments); + if (coalesceArguments.Count == 1) + { + return coalesceArguments[0]; + } + else if (coalesceArguments.Count == sqlFunctionExpression.Arguments.Count) + { + return sqlFunctionExpression.Update(sqlFunctionExpression.Instance, coalesceArguments); + } + else + { + return _sqlExpressionFactory.Function( + sqlFunctionExpression.Name, + coalesceArguments, + sqlFunctionExpression.IsNullable, + argumentsPropagateNullability: coalesceArguments.Select(_ => false).ToArray(), + sqlFunctionExpression.Type, + sqlFunctionExpression.TypeMapping); + } } var useNullabilityPropagation = sqlFunctionExpression is { InstancePropagatesNullability: true };