空列表的平均值会在Razor View上抛出异常

时间:2016-04-30 05:51:06

标签: c# html asp.net-mvc linq razor

我直接在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中......

1 个答案:

答案 0 :(得分:7)

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

@Model.Select(x => x.Age).DefaultIfEmpty(0).Average();
如果集合为空,

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