AverageAsync выдает исключение, когда перечисление пусто - PullRequest
1 голос
/ 23 мая 2019

Использование Entity Framework Core У меня следующий запрос:

var avgDuration = await projects.AverageAsync(x => x.Duration);

Когда перечисление projects пусто, я получаю следующую ошибку:

InvalidOperationException: Sequence contains no elements. 

Есть ли способ AverageAsync не генерировать исключение при перечислении как не элементах.

Разве просто не вернуть ноль?

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Есть ли способ AverageAsync не генерировать исключение при перечислении как не элементах.

Не должно просто вернуть ноль?

Average и AverageAsync (а также Min, Max) вернут null в пустом наборе, когда тип значения равен nullable . Если это не так, просто переведите его в соответствующий обнуляемый тип, используя оператор приведения C #.

Например, если в вашем примере тип x.Duration равен int, тогда используйте int? cast:

var avgDuration = await projects.AverageAsync(x => (int?)x.Duration);

И если вы хотите получить 0 (ноль), когда исходный набор пуст, тогда просто примените ?? 0 к результату.

0 голосов
/ 23 мая 2019

Я нашел способ ее решить ... Использовать DefaultIfEmpty:

var avgDuration = await projects.DefaultIfEmpty().AverageAsync(x => x.Duration);
...