Linq Как получить среднее значение Когда все значения равны нулю или 0? MVC

Когда моя модель имеет значения, я могу легко получить среднее значение с помощью этого кода

@Model.Where(a => a.count!= null).Average(a => a.totalday).ToString()

Например:

количество = 7 всего дня = 3 в среднем = 2,33

Но я не могу получить среднее значение, когда значения моей модели равны нулю или нулю. Как вы знаете, мы не можем разделить 0 на 0 или ноль на ноль.

Я имею в виду;

count = 0 или ноль; totalday= 0 или ноль; средний =????

Если все значения равны нулю, как я могу записать свою таблицу в "0" или строку типа "нет никакого среднего"

Я много чего перепробовал, но получаю ошибку.

2 ответа

Решение

Это действительно зависит от того, что вы хотите сделать. Если у вас есть какое-то значение по умолчанию для среднего значения, вы можете использовать DefaultIfEmpty

@Model.Where(a => a.count!= null)
      .Select(a => a.totalday)
      .DefaultIfEmpty(0)
      .Average()
      .ToString()

Но если было бы лучше отобразить что-то еще целиком, вам сначала нужно проверить, есть ли какие-либо элементы в отфильтрованной последовательности.

Там нет проблем с нулями в вашем списке.

var list = new List<int>{ 0,1,2,3,4,5,6};
var avg = list.Average(); // avg = 3

Возможно, вы захотите позаботиться о своих нулях, но вы можете легко отфильтровать их с помощью:

var not_null_list = some_list.Where(item => item != null);

Оттуда вы должны быть в порядке (Если вам не нужно учитывать числа, которые являются нулевыми, что не имеет особого смысла, я думаю....)

Редактировать:
Я вижу твою дилемму. Я бы предложил следующее в этом случае:)

var list = new List<int>{};
string answer;
if (list.Any ())
    answer = list.Average();
else
    answer = "User is a shmartsy pants. Try again with valid data";
Другие вопросы по тегам