如何获得具有潜在null的Max()?

时间:2013-10-24 18:27:57

标签: .net linq c#-4.0

我正在运行以下查询,但失败并出现异常:

转换为值类型'Int32'失败,因为具体化值为null。

var myvalue = conn.Employees.Where(r => r.LastName == LastName).Max(r1 => r1.Id);

有没有办法获得Max()并在一行代码中考虑空值?

1 个答案:

答案 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 );