C#使用LINQ和无效布尔值
-
02-10-2019 - |
题
我有以下LINQ查询,其中可能是y,n或dbnull的文本字段并填充布尔值?具有真实,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?
和 null
, ,这也有效:
(i.targetmet != null) ? (i.targetmet == "Y") : (bool?)null;
这是一个隐含的转换 bool
和 bool?
. 。我任意更喜欢第一个。
其他提示
您可以明确将一个或多个表达式转换为 bool?
:
(i.targetmet == "Y") ? true : ((i.targetmet == "N") ? (bool?)false : (bool?)null)
不隶属于 StackOverflow