2

我有以下查询:

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

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

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

请帮忙

4

1 回答 1

2

防御性编程的基础知识:

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

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

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

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

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

if(Giver.HasValue)
{
   ......
}
于 2013-03-28T06:21:11.703 回答