空列表的平均值在Razor视图中抛出异常

问题描述:

我直接放在Razor上查看Linq Query以获取列表中的年龄平均值......当该列表为空时,它将抛出一个空引用异常... The代码的伟大工程当列表不为空..空列表的平均值在Razor视图中抛出异常

这是对Razor视图的代码片段(唯一的例外是从这里抛出):

<label> Age average:</label>@Model.DefaultIfEmpty().Average(p => p.Age) 

这是代码片段,其中列表在控制器类上创建(当不存在巧合时抛出异常,我的意思是当列表为空时...):

public ActionResult Index(int? age, string name) 
     { 
var people = db.People.ToList(); 
      if (age != null && !string.IsNullOrEmpty(name)) 
      { 
       people = db.People.Where(x => x.Age >= age && x.Name.Contains(name)).ToList(); 
      } 
      else if (age != null && string.IsNullOrEmpty(name)) 
      { 
       people = db.People.Where(x => x.Age >= age).ToList(); 
      } 
      else if (age == null && !string.IsNullOrEmpty(name)) 
      { 
       people = db.People.Where(x => x.Name.Contains(name)).ToList(); 
      } 
return View(people); 
     } 

如何在Razor视图中将平均值的默认值设置为0如果列表为空? 我一直在尝试与合并操作符?但我不知道如何做到这一点,是在一个剃刀视图..

您的模型不是null - 它只是一个空的集合。您可以使用

@Model.Select(x => x.Age).DefaultIfEmpty(0).Average(); 

如果集合为空,将返回0.0。但请注意,此代码真的属于您的控制器,而不是视图(并将查询结果传递给使用视图模型属性的视图(或ViewBag

+0

它工作得很好!!我会根据您的建议和我将创建一个新的视图模型属性... – AlexGH