C# 如果字段包含null,则整个连接结果为null

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

我正在尝试连接标签。如果字段包含null,则整个连接结果为null

在这里,若字段中不存在数据,则标签将变为null

我试过了

选择新{label=N.Address1??+|+N.Address2??+|+N.City??,id=N.id}


然后它只接受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, '')