SQL中排除NULL值的工时计算方法优化求助
解决NULL值导致的工作时长计算错误问题
我明白你遇到的问题了——当数据库里的ZPZ_Von或ZPZ_Bis存在NULL值时,你的计算方法会把这些无效记录也算进去,导致结果偏离正确值。那些包含NULL的记录其实是不应该被纳入计算的,我们只需要在求和前先过滤掉这些无效条目就行。
修改后的C#方法
private TimeSpan CalculateWorkingHours(List<PRAESENZZEIT> arrivals) { // 先过滤掉ZPZ_Von或ZPZ_Bis为NULL的记录,只保留能计算有效时长的条目 var validEntries = arrivals.Where(x => x.ZPZ_Von != null && x.ZPZ_Bis != null); // 对有效记录计算单条时长的Ticks总和,再转换为TimeSpan return new TimeSpan(validEntries.Sum(x => (x.ZPZ_Bis.Value.TimeOfDay - x.ZPZ_Von.Value.TimeOfDay).Ticks)); }
关键修改点说明
- 过滤无效记录:通过
Where条件筛选出ZPZ_Von和ZPZ_Bis都不为NULL的条目,确保我们只处理有完整起始和结束时间的记录。 - 安全访问属性:因为已经提前过滤了NULL值,所以可以安全地用
.Value来访问DateTime属性的TimeOfDay,同时避免潜在的空引用异常。
这样修改后,计算时就会自动跳过那些包含NULL值的记录,得到你期望的正确结果(约6小时41分的TimeSpan)。
内容的提问来源于stack exchange,提问作者user9857941
相关产品推荐
相关产品推荐

