【问题标题】:I Have a problem retrieving some null data from my DB?从我的数据库中检索一些空数据时遇到问题?
【发布时间】:2019-07-10 07:55:18
【问题描述】:

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

我已经尝试过使用?? 操作符,但还是有问题。

这是我的代码行:

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

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

转换为值类型“System.Int32”失败,因为物化了 值为空。结果类型的泛型参数或查询 必须使用可空类型。

【问题讨论】:

  • 在问题中包含您的 Emplooyee_Attendance 和项目模型,以便我们查看它们的属性。
  • 你试过“?” .Max(p => p?.Attendance_ID);如果不匹配 - 它将返回 NULL

标签: c# sql entity-framework linq


【解决方案1】:

看起来Where 条件与任何内容都不匹配。由于您正在寻找 IDs(我假设它是整数),我建议您检查您的模型/数据库结构是否缺少约束。此外,由于您正在寻找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?

【讨论】:

    【解决方案2】:

    我会在 where 中进行空检查,然后从剩余元素中获取匹配项(如果有的话)。

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

    如果它解决了您的问题,请告诉我。

    【讨论】:

    • 我已经尝试过这个解决方案,但是它抛出了另一个异常 System.InvalidOperationException: Sequence contains no elements
    • @MohamedMounir 表示Where返回0个元素,即不符合你的条件。
    • 这本质上意味着没有一个Employee_ID 不同于null 并且同时等于item.Id。因此,当您尝试取最大值时,您会尝试取最大值,这会引发 Sequence contains no elements 异常。
    • 我强烈建议将 .ToList() 移到链的末尾。
    • @Robert 是的,我明白你的意思,但 IQueriable 不允许表达式树。相反,我认为确保没有强制转换异常的双重位置是最好的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    相关资源
    最近更新 更多