首頁 >後端開發 >C++ >如何解決具有 Null 值的 LINQ 查詢中的「Cast to Int32 Failed」錯誤?

如何解決具有 Null 值的 LINQ 查詢中的「Cast to Int32 Failed」錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-10 20:41:45559瀏覽

How to Resolve

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

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