我正在运行以下查询,但失败并出现异常:
转换为值类型'Int32'失败,因为具体化值为null。
var myvalue = conn.Employees.Where(r => r.LastName == LastName).Max(r1 => r1.Id);
有没有办法获得Max()并在一行代码中考虑空值?
答案 0 :(得分:3)
假设Id是可以为空的,可以使用coallesce 或者扩展where-condition:
// Coallesce- probably not the best thing here
var myvalue = conn.Employees.Where(r => r.LastName == LastName).Max(r1 => r1.Id ?? 0);
// Expanded where-condition
var myvalue = conn.Employees.Where(r => r!= null && r.Id!=null && r.LastName == LastName).Max(r1 => r1.Id);
请注意,myvalue也可以为null。 所以如果你做这样的事情:
int someInt = (int) myvalue;
显然会有例外。
所以修复可能是:
int someInt =(int) ( myvalue ?? 0 );