我有这样的代码:如果赋值返回null,是否有办法强制变量为0?
var btns = "(BTNACOUNT + BTNBCOUNT + BTNCCOUNT + BTNDCOUNT)";
int abc = db2.ExecuteScalar<int>("SELECT " + btns + " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd);
右侧的查询将返回一个数字或空。
如果在右侧返回null,是否有一种方法将abc的值设置为0?
我有这样的代码:如果赋值返回null,是否有办法强制变量为0?
var btns = "(BTNACOUNT + BTNBCOUNT + BTNCCOUNT + BTNDCOUNT)";
int abc = db2.ExecuteScalar<int>("SELECT " + btns + " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd);
右侧的查询将返回一个数字或空。
如果在右侧返回null,是否有一种方法将abc的值设置为0?
使用null coalescing操作??
:
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)
int abc = db2.ExecuteScalar<int>("select isnull((SELECT " + btns + " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd),0)");
包装你的SQL语句作为替代@ hnegfatl是正确的答案,你可以使用'COALESCE做到这一点已经在SQL((BTNACOUNT + BTNBCOUNT + BTNCCOUNT + BTNDCOUNT ),0)' –
请记住,如果任何* BTNACOUNT,BTNBCOUNT,BTNCCOUNT,BTNDCOUNT都是NULL,那么总和也是一样。从这些列的名称来看,我得到的印象不是你想要的,你想将(1,2,3,NULL)加到6。这是正确的吗? – hvd