【发布时间】:2014-04-28 09:08:57
【问题描述】:
我正在从 DB 获取 DBNull 结果。
尝试申请??运营商喜欢它
result["field1"] ?? result["field2"]
field1 = DBNull
字段2 = 4
但它不起作用,返回 {} 因为 result["field1"] 不为空(它是 DBNull)。我希望从中得到 4 个。
试过了
result["field1"] = null
首先,但它不起作用,它仍然是 DBNull 类型。
问题是如何处理这个问题,以某种方式将 DBNull 转换为 null? 怎么做 ??运算符是否使用 DBNull 值?
更准确地说:
有没有办法获得类似COALESCE的行为?
这2个字段只是举例,实际上会有更多的字段,我试图让第一个不为空(所以我希望使用链接 field1 ?? field2 ?? field3 ...)
我说得不准确,抱歉,是我的错。
解决方案
按照 Peter van der Heijden 解决方案,假设我来自 DB
结果["field1"] = DBNull
结果["field2"]= DBNull
结果["field3"] = 4
result["field1"] ?? result["field2"] ?? result["field3"]
将返回 {}(首先不为空,DBNull 是……嗯……不为空)
但是
result["field1"] as int? ?? result["field2"] as int? ?? result["field3"] as int?
将按预期返回 result["field3"] = 4。
int?可以替换为您获得的任何结果类型(例如 DateTime?)。
【问题讨论】:
-
result["field1"] == DBNull.Value ? result["field2"] : result["field1"]是一个选项吗? -
用作
result["field1"] == DBNull.Value ? result["field2"] : 'result["field1"] -
如果
result是DataRow,那么你可以使用IsNull方法。例如。result.IsNull("field1")
标签: c# .net-4.5 ternary-operator