Используя Макс и получить ошибку «последовательность не содержит элементов» - PullRequest
1 голос
/ 13 февраля 2020

Я добавляю строку в свою таблицу. Один из столбцов (SubjectCount) содержит значение счетчика. Значение счетчика должно получить максимальное значение этого столбца и добавить к нему 1.

Я добавил этот код

s.SubjectCount = GetAll().Max(t => t.SubjectCount as int?)?? 0 + 1;

, но значение всегда равно 1. Если я изменяю его на

s.SubjectCount = GetAll().Max(t => t.SubjectCount) + 1;

Тогда это работает, если присутствует существующая строка, но нет, если таблица / значение пусто, я получаю ошибку " последовательность не содержит элементов ".

Я искал ошибку и также пытался DefaultIfEmpty(), но это не помогло решить проблему (если у меня неверный синтаксис).

Наконец GetAll() в настоящее время не возвращает строк (где я думаю, что проблема в), поэтому я знаю, что я мог бы добавить первую строку вручную, но в идеале я хотел бы конкретное решение этой проблемы, если таблицы пусты?

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

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

var entities = GetAll();
s.SubjectCount = (entities?.Any() == true ? entities.Max(t => t.SubjectCount) : 0) + 1;

Вам также следует рассмотреть возможность выполнения операции Max непосредственно в SQL, а не в памяти.

1 голос
/ 13 февраля 2020

Это работает?

s.SubjectCount = GetAll().Max(t => t.SubjectCount as int?)?? 0;
s.SubjectCount++;

Ваша предыдущая реализация не добавляет 1, если в вашей таблице есть одна или несколько строк, поэтому она всегда возвращает одну.

...