linq .Value可为空的对象必须有一个值,如何跳过?

nfs0ujit  于 2023-09-28  发布在  其他
关注(0)|答案(4)|浏览(158)

我有一些linq代码,有时是null

cbo3.ItemsSource = empty.Union(from a in
                                           (from b in CompleteData
                                            select b.TourOpID).Distinct()
                                       select new ComboBoxItemString() { ValueString = a.Value.ToString() });

但是TourOpID有时会在a.Value.ToString()上抛出一个错误。我该怎么解决这个问题?

hmae6n7t

hmae6n7t1#

出现问题是因为您访问Nullable类型的Value property,该类型为null(或者更准确地说,其HasValue属性为false)。如何解决此问题取决于您要执行的操作:
1.如果你想过滤掉TourOpID为null的条目,只需添加一个where子句:

...
(from b in CompleteData
 where b.TourOpID != null         // filter
 select b.TourOpID).Distinct()
...

1.如果您想使用替换值,例如0,如果TourOpID为null,则使用null coalescing operator??,它将您的int?转换为int

...
(from b in CompleteData
 select b.TourOpID ?? 0).Distinct()
...

或者,可替换地,

...
select new ComboBoxItemString() { ValueString = a.GetValueOrDefault().ToString() });

1.如果你只想在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没有值,则返回空字符串。

58wvjzkj

58wvjzkj2#

使用where

from b in CompleteData where b.TourOpID != null select b.TourOpID
8iwquhpp

8iwquhpp3#

为什么不使用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
cczfrluj

cczfrluj4#

summaryViewModel.MisroutedCount = documentQueryList.Where(p => (p.IsMisrouted == null ? false : p.IsMisrouted == true) && (p.ModifiedDateTime == null ? false : p.ModifiedDateTime.Value.Date == DateTime.Now.Date)).ToList().Count;

相关问题