C# 如果字段包含null,则整个连接结果为null
我正在尝试连接标签。如果字段包含null,则整个连接结果为null 在这里,若字段中不存在数据,则标签将变为null 我试过了 选择新{label=N.Address1??+|+N.Address2??+|+N.City??,id=N.id}C# 如果字段包含null,则整个连接结果为null,c#,postgresql,asp.net-core,entity-framework-core,C#,Postgresql,Asp.net Core,Entity Framework Core,我正在尝试连接标签。如果字段包含null,则整个连接结果为null 在这里,若字段中不存在数据,则标签将变为null 我试过了 选择新{label=N.Address1??+|+N.Address2??+|+N.City??,id=N.id} 然后它只接受N.Address1值,并忽略其余字段。看起来这是一种标准的SQL字符串连接行为,SqlServer数据库也会发生这种情况 如果要计算连接服务器端数据库,需要使用??操作人员与您的尝试类似,但您错过了C运算符的优先级。你写它的方式相当于 N.A
然后它只接受N.Address1值,并忽略其余字段。看起来这是一种标准的SQL字符串连接行为,SqlServer数据库也会发生这种情况 如果要计算连接服务器端数据库,需要使用??操作人员与您的尝试类似,但您错过了C运算符的优先级。你写它的方式相当于
N.Address1 ??
(
("?" + " | " + N.Address2) ??
(
("?" + " | " + N.City) ?? "?"
)
)
这并不是目的所在
通过用括号括起类似的转换,可以避免此类问题:
select new
{
label = (N.Address1 ?? "?") + " | " + (N.Address2 ?? "?") + " | " + (N.City ?? "?"),
id = N.ID,
}
这是符合标准且合理的行为:如果将字符串与未知字符串连接起来,则结果未知 使用合并功能进行以下操作:
coalesce(col1, '') || coalesce(col2, '')
字符串插值,即新的{label=${N.Address1}{N.Address2}{N.City},id=N.id}是否给出相同的结果?在这种情况下,它的工作方式…字符串插值与预期的一样。字符串插值之所以有效,是因为表达式是在客户端C上计算的。一般建议:1永远不要将实时查询返回到MVC管道。2使用实体框架核心的异步特性。
coalesce(col1, '') || coalesce(col2, '')