我有这个代码:
var btns = "(BTNACOUNT + BTNBCOUNT + BTNCCOUNT + BTNDCOUNT)";
int abc = db2.ExecuteScalar<int>("SELECT " + btns + " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd);
右侧的查询将返回一个数字或 null。
如果在右侧返回 null,是否有单行方法将 abc 的值设置为 0?
使用 null 合并运算符 ??
:
int abc = db2.ExecuteScalar<int>(...) ?? 0;
如果运算符的 LHS 为非空,则返回该 - 否则,它返回 RHS(有点像默认值)。
或者,有 Nullable<T>.GetValueOrDefault()
和 Nullable<T>.GetValueOrDefault(T)
,它们做同样的事情,但更具可读性:
int abc = db2.ExecuteScalar<int>(...).GetValueOrDefault(0);
ExecuteScalar 返回 DBNull
而不是 null
,您可以检查ABC是否DBNull
并设置值;
if(abs is DBNull)
abc=0;
或者,您可以使用 select isnull((original statement...),0)
包装 SQL 语句
int abc = db2.ExecuteScalar<int>("select isnull((SELECT " + btns + " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd),0)");