我有這樣的代碼:如果賦值返回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