如何在ASP.NET MVC视图中计算并显示每日食物总热量?
实现每日总热量统计的方法
很容易搞定这个需求,既然你已经通过GroupBy按周几完成了分组,只需要在每组的食物列表循环结束后,计算该组所有食物的热量总和并展示即可。
修改后的完整代码
@model Database.MealPlanner @{ ViewBag.Title = "Details"; } <div> <h4>Aliments</h4> <hr /> <ul> @foreach (var weekDay in @Model.MealPlannerAliments.GroupBy(q => q.WeekDay).ToList()) { <li class="custom-list-heading list-unstyled"><b>@weekDay.Key</b></li> foreach (var item in weekDay) { <li id="alimentsByDay"> <div> <p>@item.Aliment.Name (Calories: @item.Aliment.NutritionalValue.Calories )</p> </div> </li> } <!-- 新增:显示当日总热量 --> <li class="total-calories"> <p><i>Total Number of Calories/@weekDay.Key : @weekDay.Sum(item => item.Aliment.NutritionalValue.Calories)</i></p> </li> } </ul> </div>
关键说明
- 利用LINQ的
Sum方法,直接对当前分组weekDay中的所有食物项计算热量总和:weekDay.Sum(item => item.Aliment.NutritionalValue.Calories) - 可以给总热量的
<li>添加自定义类(比如示例中的total-calories),方便通过CSS设置样式(比如加粗、改变文字颜色)让它更醒目
额外建议(避免空引用异常)
如果NutritionalValue可能为null,建议使用空条件运算符?.搭配空合并运算符??避免运行时错误,修改求和代码为:
@weekDay.Sum(item => item.Aliment.NutritionalValue?.Calories ?? 0)
这里的?? 0表示如果NutritionalValue为null,就用0代替参与计算,防止抛出NullReferenceException。
内容的提问来源于stack exchange,提问作者Andre.A
相关产品推荐
相关产品推荐

