Linq如何获得平均值当所有值等于null或0时? MVC

时间:2014-09-10 11:06:48

标签: c# asp.net-mvc linq asp.net-mvc-4 lambda

当我的模型有值时,我可以使用此代码轻松获得平均值

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

例如:

  

count = 7 totalday = 3 average = 2.33

但是当我的模型值等于null或为零时,我无法获得平均值。如您所知,我们不能将0除以0或将null除以null。

我的意思是;

  

count = 0或null; totalday = 0或null; average = ????

如果所有值都为null,我如何将表格写入" 0"或类似&#34的字符串;没有任何平均值"

我尝试了很多东西,但是我收到了错误。

2 个答案:

答案 0 :(得分:17)

这实际上取决于你想做什么。如果您对平均值有某种默认值,那么您可以使用DefaultIfEmpty

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

但如果最好完全显示其他内容,那么你必须首先检查过滤后的序列中是否有任何元素。

答案 1 :(得分:2)

列表中的零没有问题。

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";