[英]C# using LINQ and Nullable Boolean
我有下面的linq查詢,它接受一個文本字段,可能是Y,N或DBnull並填充一個布爾值? 參數,無論是True,False還是null,具體取決於字段的值。
var dset = from i in tbdc.Talkbacks
where i.talkback_id == id
select new Talkback(
i.talkback_id, i.acad_period, i.reference,
i.staff_member, i.date_received, i.no_talkers,
i.gender_id, i.names, i.type_id,
i.method_id, i.area_id, i.site_id,
i.category_id, i.date_closed, i.expenddate,
i.acknowledgementtarget,
(i.targetmet == "Y") ? true :
((i.targetmet == "N") ? false : null),
(i.acknowledgementtargetmet != "N") ? true : false
有問題的路線是
(i.targetmet == "Y") ? true : ((i.targetmet == "N") ? false : null)
在閱讀之后,我發現了一些文檔,其中聲明內聯的第二個和第三個參數需要是相同類型的,或者可以隱式地相互轉換。
我的問題是,如何繞過這個限制來實現我想要的結果?
我對C#比較新,所以我還不熟悉它的所有怪癖/功能。
我的建議是用以下代替:
(i.targetmet != null) ? (bool?)(i.targetmet == "Y") : null;
編譯器在沒有強制轉換的情況下不同意的原因是,即使將其存儲為可空結構,三元操作也會檢查結果是否通過隱式轉換兼容。
結果true
與false
都被視為bool
文字,不是bool?
因此不能隱式轉換為null
。 鑄造任何一個結果到bool?
會使它們具有可比性。 我建議的那個在bool?
之間有一個隱含的轉換bool?
和null
,這也有效:
(i.targetmet != null) ? (i.targetmet == "Y") : (bool?)null;
這是bool
和bool?
之間的隱式轉換bool?
。 我隨意喜歡第一個..
您可以將一個或多個表達式顯式轉換為bool?
:
(i.targetmet == "Y") ? true : ((i.targetmet == "N") ? (bool?)false : (bool?)null)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.