[英]Linq2SQL: Always get .Sum() to return 0 instead of null
有沒有辦法(通過擴展機制?)讓Sum()
函數全部返回0。
我現在的解決方法是寫這樣的,但我希望有更好的解決方案?
((int?)e.CampaignCodes.Sum(f => f.Enquiries.Count()) ?? 0),
你的解決方法很好。 為什么不為IEnumerable編寫一個類似於Sum的擴展方法,稱為SumOrDefault。 然后你可以重用你的擴展方法,你不必看到解決方法。
您的擴展方法非常簡單,只需使用解決方法中的確切代碼即可。
實際上,這是一個非常好的方式。 我認為更好的問題是為什么它開始時為空? 除非您調用sum的實體為null,否則查詢應始終返回0.這可能是一個更好的解決方案,可以查看您的實體在開始時是否有效,而不是強制總和始終返回0 - Null表示有一個問題。
寫一個擴展方法:
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;
}
它是0還是null的問題是一個棘手的問題。 這取決於你解釋“總和”的含義。 如果它是“所有(選定的)記錄的總和”,則當任何記錄包含NULL時,null是合適的,因為從技術上講,您不確定。 如果它表示“所有已知(選定)記錄的總和”,則應返回0。
在你的情況下哪一個是合適的,你只能決定,所以我認為你在這里所做的並不是一個糟糕的解決方案。
有關NULL的棘手問題的更多信息,請閱讀Chris Date和Hugh Darwen關於該主題的一些着作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.