У меня проблема с получением некоторых нулевых данных из моей БД? - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь получить конкретное значение из моей БД, но получаю какое-то исключение, и я не могу им управлять, какие-либо предложения?

Я уже пытался использовать оператор ??, но все ещеесть проблема.

Это моя строка кода:

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

Я ожидаю идентификатор, но все, что я получаю, это следующее исключение:

приведение к типу значения «System.Int32» не выполнено, поскольку материализованное значение равно нулю.Либо универсальный параметр типа результата, либо запрос должен использовать обнуляемый тип.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Похоже, что условие 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?
0 голосов
/ 10 июля 2019

Я бы сделал нулевую проверку в местоположении и затем получил бы соответствующие элементы из оставшихся элементов, если они есть.

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

дайте мне знать, если это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...