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中文网其他相关文章!