我直接在Razor上查看Linq查询以获取人员列表的年龄平均值...当该列表为null时,它会抛出一个空引用异常...当列表不为null时,代码工作正常..
这是Razor View上的代码片段(此处抛出异常):
<label> Age average:</label>@Model.DefaultIfEmpty().Average(p => p.Age)
这是在Controller类上创建列表的代码片段(当没有巧合时抛出异常,我的意思是当列表为空时......):
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 View中将默认值设置为0? 我一直在尝试使用合并算子?但是我不确定如何做到这一点,是在Razor View中......
答案 0 :(得分:7)
您的模型不是null
- 它只是一个空集合。你可以用
@Model.Select(x => x.Age).DefaultIfEmpty(0).Average();
如果集合为空,将返回0.0
。但请注意,此代码确实属于您的控制器,而不是视图(并使用视图模型属性(或ViewBag
)将查询结果传递给视图