iT邦幫忙

0

[已解決] 如何判斷decimal類型的欄位是否有值

我想要判斷row.Voltage是不是null,若是的話就是給本身的值,不是的話就給他空。
row.Voltage這個欄位的資料本身從資料庫來,本身是decimal型態,但我撰寫以下程式做判斷時,會有error訊息,想詢問可以怎麼調整呢?

for(int i=0;i<contents.Count;++i){
    var row=contents[i];
    dynamic parameter1=null;
    parameter1=(null!=row.Voltage? row.Voltage : string.Empty);
}

目前已嘗試以下方法,但都無效 :

//error : 無法將 null 轉換成 'bool',因為它是不可為 null 的實值類型
parameter1=(null!=System.Convert.ToInt32(row.Voltage)? row.VoltageVrms: string.Empty);
//error : 無法將 null 轉換成 'bool',因為它是不可為 null 的實值類型
parameter1=(null!=(int)row.Voltage? row.VoltageVrms: string.Empty);
//'decimal' 不包含 'HasValue' 的定義
parameter1=(null!=row.Voltage.HasValue()? row.VoltageVrms: string.Empty);
看更多先前的討論...收起先前的討論...
YoChen iT邦研究生 1 級 ‧ 2020-05-14 16:05:21 檢舉
contents的型別是什麼?
anniecat iT邦新手 3 級 ‧ 2020-05-14 16:06:38 檢舉
contents的型別為dynamic
YoChen iT邦研究生 1 級 ‧ 2020-05-14 16:25:58 檢舉
用dynamic我真的很難幫您除錯~XDDD
ch_lute iT邦新手 5 級 ‧ 2020-05-14 16:30:48 檢舉
乖乖用if else就好了,三元會因為string.Empty是string和判斷式內的型別不同不能用
ch_lute iT邦新手 5 級 ‧ 2020-05-14 16:33:30 檢舉
int? a = null;
parameter1 = a ?? string.Empty;
這樣不行但 if(a!= null){parameter1 = a;} else (parameter1 = string.Empty;)就可以
如果一定要用三元判斷的話就不要用dynamic吧,用string然後要用的時後再轉成數字,或其他方法
ch_lute iT邦新手 5 級 ‧ 2020-05-14 16:35:19 檢舉
然後你嘗試的那些convert.toint如果遇到null轉完也不會是null,所以這邊也會多一個錯誤
anniecat iT邦新手 3 級 ‧ 2020-05-14 17:05:42 檢舉
ch_lute, 我調整為如下程式,則會出現error : 無法將類型 'decimal' 轉換為 'string'

var parameter1="";
if(null!=row.Voltage){parameter1=(string)row.VoltageVrms;}
ch_lute iT邦新手 5 級 ‧ 2020-05-14 17:15:59 檢舉
row.VoltageVrms.ToString();
anniecat iT邦新手 3 級 ‧ 2020-05-14 18:19:51 檢舉
可以了~謝謝!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
純真的人
iT邦大師 1 級 ‧ 2020-05-14 15:35:18
parameter1=(row.IsNull("Voltage")? row.VoltageVrms: string.Empty);

https://docs.microsoft.com/zh-tw/dotnet/api/system.data.datarow.isnull?view=netcore-3.1

看更多先前的回應...收起先前的回應...
anniecat iT邦新手 3 級 ‧ 2020-05-14 15:56:38 檢舉

調整此方式後,會有此error : 'contents' 不包含 'IsNull' 的定義

row.VoltageVrms是從資料集contents,跑迴圈取出來的某個欄位

for(int i=0;i<contents.Count;++i){
    var row=contents[i];
    dynamic parameter1=null;
    parameter1=(null!=row.Voltage? row.Voltage : string.Empty);
}

喔~我還以為你是用DataRow

我對於null問題~都會在判斷式+空字串回避
就是if用字串型別去判斷~

anniecat iT邦新手 3 級 ‧ 2020-05-15 09:38:48 檢舉

謝謝你的幫忙~

我要發表回答

立即登入回答