首頁 >後端開發 >C++ >如何處理 LINQ Sum() 中的空值以避免「轉換為值類型『Int32』失敗」錯誤?

如何處理 LINQ Sum() 中的空值以避免「轉換為值類型『Int32』失敗」錯誤?

Patricia Arquette
Patricia Arquette原創
2025-01-10 20:52:41374瀏覽

How to Handle Null Values in LINQ Sum() to Avoid

LINQ 查詢中的空值處理:解決「無法轉換為值類型'Int32'」錯誤

這段程式碼使用 LINQ 查詢來擷取特定使用者 ID 的信用記錄金額總和。當 CreditHistory 表中沒有記錄時,由於傳回空值,會遇到錯誤。

改寫查詢以處理空值

錯誤發生是因為 Sum() 方法期望非空值,但查詢可能會傳回空值。為了解決這個問題,可以使用 ?? 運算子或 DefaultIfEmpty() 方法修改查詢以接受可空類型。

使用 ?? 運算子

?? 運算子可用來透過指定預設值來處理空值:

<code class="language-csharp">var creditsSum = (from u in context.User
                  join ch in context.CreditHistory on u.ID equals ch.UserID
                  where u.ID == userID
                  select (int?)ch.Amount).Sum() ?? 0;</code>

此程式碼首先將 Amount 屬性轉換為 int? 以指示它可以為空。然後,使用 Sum() 方法計算總和,該方法傳回 int?。然後使用 ?? 運算子在結果為空的情況下分配預設值 0。

使用 DefaultIfEmpty() 方法

或者,可以使用 DefaultIfEmpty() 方法處理空值:

<code class="language-csharp">var creditsSum = (from u in context.User
                  join ch in context.CreditHistory on u.ID equals ch.UserID
                  where u.ID == userID
                  select ch.Amount).DefaultIfEmpty(0).Sum();</code>

此方法在執行 Sum() 操作之前向序列新增一個預設值 (0)。如果序列不包含任何元素,則預設值將用於總和計算。

以上是如何處理 LINQ Sum() 中的空值以避免「轉換為值類型『Int32』失敗」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn