2016-04-30 57 views
0

我直接放在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如果列表爲空? 我一直在嘗試與合併操作符?但我不知道如何做到這一點,是在一個剃刀視圖..

回答

5

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

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

如果集合爲空,將返回0.0。但請注意,此代碼真的屬於您的控制器,而不是視圖(並將查詢結果傳遞給使用視圖模型屬性的視圖(或ViewBag

+0

它工作得很好!!我會根據您的建議和我將創建一個新的視圖模型屬性... – AlexGH