在我的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也是可空的
如何将EpisodeTimeLength
的null
值解释为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.EpisodeTimeLength
为null
时,您可以指定一个默认值:
CourseTotalTime = new TimeSpan(
c.Episodes
.Sum(t => (t.EpisodeTimeLength ?? TimeSpan.Zero).Ticks))
这使用了空合并运算符。
两种方法的演示