我从数据库检索一些空数据时遇到问题?

时间:2019-07-10 07:55:18

标签: c# sql entity-framework linq

我正在尝试从数据库中获取特定值,但是我遇到了一些异常,我无法管理它,有什么建议吗?

我已经尝试使用??运算符,但是仍然有问题。

这是我的代码行:

var Emp_Attendance_ID = db.Emplooyee_Attendance.Where(a => a.Employee_ID == item.Id).Max(p => p.Attendance_ID);

我期望有一个ID,但是我得到的只是以下异常:

  

强制转换为值类型'System.Int32',因为已实现   值是null。结果类型的通用参数或查询   必须使用可为空的类型。

2 个答案:

答案 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?