如何处理 sum() 方法中的"Nullable value type may be null"(对于 TimeSpan)?



在我的Asp.net核心项目中,我需要检查nullTimeSpan属性。这是我的方法:

return result.Include(e => e.Episodes).AsEnumerable().Select(c => new ShowListCoursesViewModel()
{
CourseId = c.CourseId,
CourseImageName = c.CourseImageName,
CoursePrice = Convert.ToDecimal(c.CoursePrice),
CourseTitle = c.CopurseTitle,
CourseTotalTime = new TimeSpan(c.Episodes.Sum(t => t.EpisodeTimeLength.Value.Ticks) )
}).Skip(skip).Take(take).OrderByDescending(d => d.CoursePrice).ToList();

t.EpisodeTimeLength下面有一个绿色的曲线,上面写着:

可空值类型可以为null。

我的CourseTotalTime属性是可空的,而且EpisodeTimeLength也是可空的

如何将EpisodeTimeLengthnull值解释为Sum中的00:00:00?例如:[null, 01:00:00, 01:00:00]应该在CourseTotaltime中生成02:00:00

可以用Sum:

前面的Where来排除null
CourseTotalTime = new TimeSpan(
c.Episodes
.Where(t => t.EpisodeTimeLength.HasValue)
.Sum(t => t.EpisodeTimeLength.Value.Ticks))

或者,当t.EpisodeTimeLengthnull时,您可以指定一个默认值:

CourseTotalTime = new TimeSpan(
c.Episodes
.Sum(t => (t.EpisodeTimeLength ?? TimeSpan.Zero).Ticks))

这使用了空合并运算符。

两种方法的演示

相关内容

最新更新