[英]linq .Value Nullable Object must have a value. How to skip?
我有一些有时为null
linq代码:
cbo3.ItemsSource = empty.Union(from a in
(from b in CompleteData
select b.TourOpID).Distinct()
select new ComboBoxItemString() { ValueString = a.Value.ToString() });
但是TourOpID
有时是null
的抛出一个错误a.Value.ToString()
我该如何解决这个问题?
出现此问题的原因是您访问Nullable
类型的Value
属性 ,该属性为null
(或者更准确地说,其HasValue
属性为false
)。 如何解决这个问题取决于你想要做什么:
如果要过滤掉TourOpID
为null的项,只需添加where
子句:
... (from b in CompleteData where b.TourOpID != null // filter select b.TourOpID).Distinct() ...
如果要使用替换值,例如0
,如果TourOpID
为null,请使用空合并运算符 ??
,转换你的int?
进入一个int
:
... (from b in CompleteData select b.TourOpID ?? 0).Distinct() ...
或者,或者,
... select new ComboBoxItemString() { ValueString = a.GetValueOrDefault().ToString() });
如果您只想在TourOpID
为null时显示不同的ComboBox条目,请使用三元运算符?:
::
... select new ComboBoxItemString() { ValueString = (a == null ? "no tour operator" : a.Value.ToString()) });
如果要显示空字符串,如果a
为null,则解决方案甚至更简单:
... select new ComboBoxItemString() { ValueString = a.ToString() });
因为Nullable.ToString返回一个空字符串,如果它没有值。
用where
from b in CompleteData where b.TourOpID != null select b.TourOpID
为什么不使用ValueString = a.ToString()
而不是ValueString = a.Value.ToString()
。 如果a
有一个值,它会将此值返回给字符串,否则 - a.ToString()
将返回空字符串。
IEnumerable<decimal?> arr = new List<decimal?>
{
1m, 4m, null, 10m, 6m
};
foreach (var @decimal in arr)
{
Console.WriteLine(@decimal.ToString());
}
输出是:
1
4
10
6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.