簡體   English   中英

Linq2SQL:總是讓.Sum()返回0而不是null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM