簡體   English   中英

C#使用LINQ和Nullable布爾值

[英]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;

編譯器在沒有強制轉換的情況下不同意的原因是,即使將其存儲為可空結構,三元操作也會檢查結果是否通過隱式轉換兼容。

結果truefalse都被視為bool文字,不是bool? 因此不能隱式轉換為null 鑄造任何一個結果到bool? 會使它們具有可比性。 我建議的那個在bool?之間有一個隱含的轉換bool? null ,這也有效:

(i.targetmet != null) ? (i.targetmet == "Y") : (bool?)null;

這是boolbool?之間的隱式轉換bool? 我隨意喜歡第一個..

您可以將一個或多個表達式顯式轉換為bool?

(i.targetmet == "Y") ? true : ((i.targetmet == "N") ? (bool?)false : (bool?)null)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM