我正在尝试串联一个标签。如果字段包含null
,则整个串联结果为null
。
[HttpGet]
public ActionResult PMAByPC(string PartnerCode)
{
var result = (from N in _POSContext.PMAs
where (N.PartnerCode == PartnerCode)
select new
{
label = N.Address1 + " | " + N.Address2 + " | " + N.City,
id = N.ID
});
return Json(result);
}
此处,如果字段中不存在数据,则标签将变为null
。
我尝试过
select new { label = N.Address1 ?? "?" + " | " + N.Address2 ?? "?" + " | " + N.City ?? "?", id = N.ID }
然后,它仅使用N.Address1
的值,而忽略其余字段。
答案 0 :(得分:3)
这看起来像是标准的SQL字符串串联行为(与SqlServer数据库相同)。
如果要评估串联服务器端(数据库),则需要使用null
运算符将""
转换为空字符串??
(或其他)。与您的尝试类似,但是您错过了C#运算符的优先级。您写的方式等同于
N.Address1 ??
(
("?" + " | " + N.Address2) ??
(
("?" + " | " + N.City) ?? "?"
)
)
这不是目的。
您可以通过将类似的转换括在方括号中来避免此类问题:
select new
{
label = (N.Address1 ?? "?") + " | " + (N.Address2 ?? "?") + " | " + (N.City ?? "?"),
id = N.ID,
}
答案 1 :(得分:0)
这是符合标准的合理行为:如果将字符串与未知字符串连接在一起,结果将是未知的。
为此使用coalesce
函数
coalesce(col1, '') || coalesce(col2, '')