如果赋值返回 null,有没有办法将变量强制为 0



我有这个代码:

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)");

最新更新