这里我使用的是简单列表,其中一个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)
}
答案 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 ?? null
是null-coalescing operator的一个示例,在您的情况下,如果r.AgeTo
为null
,则基本上说null
,然后使用null
而是。由于这不是您想要实现的目标,实际上您将Convert.ToInt32
传递到{{1}},这会导致您的错误。