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中文網其他相關文章!