【问题标题】:Error :- the cast to value type 'Int32' failed because the materialized value is null [duplicate]错误:- 转换为值类型“Int32”失败,因为具体化值为 null [重复]
【发布时间】:2013-03-18 11:55:39
【问题描述】:

我有以下疑问:

int? Giver = Convert.ToInt32(db.vwAssignments.Sum(a => a.Amount));

但如果没有符合搜索条件的记录,则会引发以下错误

转换为值类型“Int32”失败,因为具体化值为空。结果类型的泛型参数或查询必须使用可为空的类型。

请帮忙

【问题讨论】:

  • 您是否要对 null 值求和?
  • 当记录正常工作但如果没有记录则引发错误

标签: asp.net-mvc


【解决方案1】:

防御性编程的基础知识:

  • 首先将Sum() 操作的结果分配给一个可为空的变量

    object resultOfSum = db.vwAssignments.Sum(a => a.Amount);
    
  • 检查 NULL! 并且仅当它不为 null 时,然后将其转换为 INT

    if(resultOfSum != null)
    {
       int Giver = Convert.ToInt32(resultOfSum);   
    }
    

另外:如果您的 Amount 字段是 Int 开头,很可能这将已经给您 NULL 或有效的 Int - 我认为调用 Convert.ToInt32()没有必要:

int? Giver = db.vwAssignments.Sum(a => a.Amount);

if(Giver.HasValue)
{
   ......
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多