LINQ查詢中處理空值:解決「無法轉換為Int32」錯誤
在LINQ查詢中遇到「無法轉換為值類型'Int32',因為物化值為空」錯誤時,表示預期非空型別與查詢結果中可能存在空值之間存在不符。
原始查詢:
<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).Sum();</code>
問題:
此查詢會擷取具有特定userID的使用者的ch.Amount總和。但是,如果CreditHistory表中沒有該使用者的記錄,則查詢將嘗試將資料庫結果中的空值轉換為Int32,從而導致錯誤。
解:
為了適應空值,解決方案包括引入可空類型並適當地處理空值情況。
使用可空型:
首先,將select子句中的表達式轉換為可空型別,例如int?。這將告知編譯器該屬性可能包含空值:
<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();</code>
使用空白合併運算子(??):
接下來,使用??運算子處理空值情況。它檢查表達式是否為空,如果為空則傳回預設值(在本例中為0):
<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>
透過合併這些修改,查詢可以優雅地處理空值並傳回適當的結果,從而防止轉換錯誤。
以上是如何解決具有 Null 值的 LINQ 查詢中的「Cast to Int32 Failed」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!