如果找不到值,如何在LINQ查询中处理nullable int中的null

时间:2017-08-30 18:15:46

标签: linq

这里我使用的是简单列表,其中一个ageto字符串列为null

如果找不到值,我检查linq查询然后返回null。但是值不能为空错误即将出现

var list = new[]
    {
        new { AgeFrom = "0", AgeTo="24"},
        new { AgeFrom = "70", AgeTo= (string)null}
    }.ToList();


var result = from r in list 
                 select new EmployeeDTO 
         {
           //AgeFrom Column is int? in DTO  
           AgeFrom = Convert.ToInt32(r.AgeFrom),
           //AgeTo Column is int? in DTO    
           AgeTo = Convert.ToInt32(r.AgeTo ?? null)
         }

2 个答案:

答案 0 :(得分:2)

试试这个:

AgeTo = String.IsNullOrEmpty(r.AgeTo) ? (int?)null : (int?)Convert.ToInt32(r.AgeTo);

这使您的代码成为:

    var list = new[]
    {
        new { AgeFrom = "0", AgeTo="24"},
        new { AgeFrom = "70", AgeTo= (string)null}
    }.ToList();


    var result = from r in list 
                 select new EmployeeDTO 
      {
        //AgeFrom Column is int? in DTO  
        AgeFrom = Convert.ToInt32(r.AgeFrom),
        //AgeTo Column is int? in DTO    
        String.IsNullOrEmpty(r.AgeTo) ? (int?)null : (int?)Convert.ToInt32(r.AgeTo)
      };

Convert.ToInt32无法将null转换为整数,这将始终抛出异常。

答案 1 :(得分:1)

一种选择是改变:

AgeTo = Convert.ToInt32(r.AgeTo ?? null)

为:

AgeTo = r.AgeTo != null ? Convert.ToInt32(r.AgeTo) : null

语句r.AgeTo ?? nullnull-coalescing operator的一个示例,在您的情况下,如果r.AgeTonull,则基本上说null,然后使用null而是。由于这不是您想要实现的目标,实际上您将Convert.ToInt32传递到{{1}},这会导致您的错误。