Вы используете
.Where(...)
.DefaultIfEmpty()
, что означает, что если результатов нет, представьте, что это последовательность с одним нулевым результатом.Затем вы пытаетесь использовать этот нулевой результат в вызове Max ...
Возможно, вы можете изменить его на:
return tGreenSheet.Where(gs => ...)
.Max(gs => (int?) Convert.ToInt32(...)) ?? 0;
При этом используется перегрузка, которая находит максимум int?
значения - и он возвращает int? null
, если не было значений.Затем ?? 0
преобразует это нулевое значение в 0. По крайней мере, это поведение LINQ to Objects ... вам нужно проверить, дает ли оно тот же результат для вас.
Конечно, вы нене нужно использовать ?? 0
, если вы готовы изменить сигнатуру метода для возврата int?
.Это дало бы дополнительную информацию, так как вызывающий мог бы затем определить разницу между «без данных» и «некоторыми данными с максимальным значением 0»:
return tGreenSheet.Where(gs => ...)
.Max(gs => (int?) Convert.ToInt32(...));
Другой вариант - использовать перегрузку DefaultIfEmpty()
, который принимает значение - вот так:
return tGreenSheet.Where(gs => ...)
.Select(gs => Convert.ToInt32(...))
.DefaultIfEmpty(0)
.Max();