我正在尝试从数据库中获取特定值,但是我遇到了一些异常,我无法管理它,有什么建议吗?
我已经尝试使用??
运算符,但是仍然有问题。
这是我的代码行:
var Emp_Attendance_ID = db.Emplooyee_Attendance.Where(a => a.Employee_ID == item.Id).Max(p => p.Attendance_ID);
我期望有一个ID,但是我得到的只是以下异常:
强制转换为值类型'System.Int32',因为已实现 值是null。结果类型的通用参数或查询 必须使用可为空的类型。
答案 0 :(得分:0)
我会在哪里进行空检查,然后从其余元素(如果有)中获取匹配项。
var Emp_Attendance_ID = db.Emplooyee_Attendance
.Where(a => a.Employee_ID != null)
.Where(a => a.Employee_ID == item.Id)
.Max(p => p.Attendance_ID);
让我知道它是否可以解决您的问题。
答案 1 :(得分:0)
看起来Where
条件不匹配。由于您要查找 ID (我认为是整数),因此建议您检查模型/数据库结构是否缺少约束。另外,由于您正在寻找Max
的结果,所以我想可能会有很多,但是如果最终不是这种情况,您可能要考虑使用SingleOrDefault(...)
或FirstOrDefault(...)
而不是Where(...).Max(...)
。无论如何,要管理目前的代码问题,您可以在做某事之前检查是否存在匹配项,例如
if (db.Emplooyee_Attendance.Any(a => a.Employee_ID == item.Id))
{
var Emp_Attendance_ID = db.Emplooyee_Attendance.Where(a => a.Employee_ID == item.Id)
.Max(p => p.Attendance_ID);
// Rest of your code...
}
else
// Do something different?
或者您可以将Where
的结果分配给变量并检查该变量,因为它是IEnumerable
,例如
IEnumerable<int> result = db.Emplooyee_Attendance.Where(a => a.Employee_ID == item.Id);
if (result.Count() > 0)
{
int Emp_Attendance_ID = result.Max(p => p.Attendance_ID);
// Rest of your code...
}
else
// Do something different?