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 查詢中處理可空值,有兩種可能的方法:
<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>
<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中文網其他相關文章!