На самом деле существует довольно элегантный (и более производительный по сравнению с предложенным в другом ответе, поскольку он выполняет только один запрос к базе данных) способ, использующий тот факт, что агрегатные методы, такие как Min
, Max
throw Sequence contains no element
исключение только если используется с ненулевыми перегрузками, но обнуляемые перегрузки просто возвращают null
.
Таким образом, все, что вам нужно, это преобразовать тип свойства, не допускающий значения NULL, в соответствующий тип NULL. Например, если тип OrderIndex
равен int
, единственное изменение в вашем запросе может быть
.MaxAsync(x => (int?)x.OrderIndex);
Обратите внимание, что это также изменит тип принимающей переменной highestOrderIndex
на int?
. Вы можете проверить null
и отреагировать соответствующим образом, или вы можете просто объединить вызов агрегатной функции с оператором ??
и указать некоторое значение по умолчанию, например
var highestOrderIndex = (await _context.ExampleDbSet
.Where(x => x.ForeignId == foreignId)
.MaxAsync(x => (int?)x.OrderIndex)) ?? -1; // or whatever "magic" number works for you