4
A
回答
6
你的解决方法是一个很好的解决方法。为什么不写一个与Sum类似的IEnumerable的扩展方法,就像SumOrDefault一样。然后,您可以重新使用您的扩展方法,而不必查看解决方法。
您的扩展方法将非常简单,只需使用您的解决方法中的确切代码即可。
2
这实际上是一个很好的方法。我认为更好的问题是为什么它开始时是空的?除非您调用总和的实体为空,否则查询应始终返回0.这可能是一个更好的解决方案,以查看实体在开始时是否有效,而不是强制总和始终返回0 - 空值有一个问题。
1
这个问题应该是0还是null是一个棘手的问题。这取决于你对“总和”的理解。如果它是“所有(所选)记录的总和”,当任何记录包含NULL时,null将是适当的,因为你在技术上不确定。如果它意味着“所有已知(选定)记录的总和”,则它应该返回0.
哪一个适合您的情况只有您可以决定,所以我认为您在这里所做的不是一个错误的解决方案在所有。
有关NULL的thornyness更多信息,请阅读一些克里斯日期的和休·达尔文的著作的主题。
1
写一个扩展方法:
public static Decimal? CorrectSum<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal?> selector)
{
Decimal? sum = null;
foreach (TSource s in source)
{
Decimal? val = selector(s);
if (val.HasValue == true)
{
sum = (sum ?? 0) + val;
}
}
return sum;
}
相关问题
- 1. 返回SUM零(0),而不是空的
- 2. 返回空而不是0
- 3. 计数返回空白,而不是0
- 4. 使DAX返回0而不是空白
- 5. Laravel 5.2.43 vs 5.2.45(Eloquent Sum返回null而不是0)?
- 6. linq2sql表达式总是返回IQueryable吗?
- 7. 为什么SUM(...)在空记录集上返回NULL而不是0?
- 8. ExpandableListView.getPackedPositionGroup总是返回0
- 9. $ parent。$ index总是返回0
- 10. Scope_Identity()总是返回0
- 11. mysql_num_rows总是返回0
- 12. Rainmeter Calc总是返回0
- 13. SqlCommand.ExecuteNonQuery()总是返回0
- 14. 则getIdentifier()总是返回0
- 15. pdo lastInsertId()总是返回0
- 16. NSPopUpButtonCell indexOfSelectedItem总是返回0
- 17. timespec.tv_sec总是返回0
- 18. NSD_GetState总是返回0:NSIS
- 19. .numChildren()总是返回0
- 20. 的intValue总是返回0
- 21. Datagridview.selectedrows.count总是返回0?
- 22. datatable.rows.count总是返回0
- 23. mysqli_affected_rows总是返回0
- 24. C#&MySQL - 总是返回0
- 25. UILabel pointSize总是返回0
- 26. NSOutlineView rowForItem:总是返回0
- 27. WebView getScrollY()总是返回0
- 28. sizeWithFont总是返回0
- 29. getUser总是返回0
- 30. 笨NUM_ROWS()总是返回0
你说得对。回归0的问题在于,这会要求任何可累加对象具有一个奇怪的中性元素,因为我可以写一个+ b而没有一个。 – Dario 2009-05-19 17:42:19