首頁 >後端開發 >C++ >在 LINQ 中求和可空整數時如何避免「轉換失敗」錯誤?

在 LINQ 中求和可空整數時如何避免「轉換失敗」錯誤?

Linda Hamilton
Linda Hamilton原創
2025-01-10 20:56:45716瀏覽

How to Avoid

LINQ 查詢中處理空值:解決「轉換失敗」錯誤

執行LINQ 查詢時,開發人員可能會遇到錯誤:「無法轉換為值類型'Int32',因為具體化值為空。」此問題發生在嘗試將可空值轉換為不可空值類型時。

以下 LINQ 查詢說明了這種情況:

<code>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).Sum();</code>

此查詢計算 CreditHistory 表中特定 userID 的 Amount 欄位的總和。但是,如果 CreditHistory 表中沒有指定使用者的記錄,則 ch.Amount 表達式將傳回 null。此空值無法轉換為不可空值類型 Int32,從而導致錯誤。

解:處理空值

為了在 LINQ 查詢中處理可空值,有兩種可能的方法:

  1. 使用 DefaultIfEmpty:如果未傳回任何行,此方法會為查詢結果新增預設值。在給定場景中,查詢可以修改為:
<code>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>
  1. 使用條件運算子 (??):條件運算子 (??) 可讓您指定在出現 null 結果時要使用的預設值。查詢可以改寫為:
<code>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>

在此版本中,表達式 (int?)ch.Amount 將值明確轉換為 int?,表示它可以為空。隨後的 ?? 運算子將任何空值替換為預設值 0。

透過實現這兩種方法中的任何一種,查詢都可以成功處理空值並傳回所需的結果。

以上是在 LINQ 中求和可空整數時如何避免「轉換失敗」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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