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