我有2个表,1个有国家,1个有州。 states表中有一个包含Population的列。
我正在使用实体,我已经为国家/地区创建了状态列表
public class TblCountries
{
//Entities for my table country
...
public List<tblStates> States { get; set; }
}
所以现在我可以列举属于某个国家的所有州。
现在我想要做的就是统计人口数量,这样我就可以显示整个国家的人口数量。
我尝试在我的视图中使用
@foreach (var item in Model.Countries) {
@Html.DisplayFor(modelItem => item.States.Count<population>)
}
但这不起作用,有人知道怎么做吗?
先谢谢!
答案 0 :(得分:1)
你不应该在视图中嵌入任何逻辑。在MVC中编程时,您的控制器应该为视图提供必要的数据。视图的作用是仅显示数据,它与计数/枚举/添加/删除等无关。
所以,对于你的特殊问题,我会这样做。首先,创建一个包含国家及其人口的ViewModel。然后在控制器操作中填充该viewmodel(这里是所有与数据库的连接,计数和实例化)。之后,您传递该视图模型以查看和编写如下内容:
@foreach (var item in Model.CountriesPopulations)
{
@Html.DisplayFor(modelItem => item.Value)
}
其中CountriesPopulations可能是Dictionary(包含国家/地区名称和人口数)。
答案 1 :(得分:1)
您需要使用Linq Sum Function
我没有检查过这段代码,但它会是这样的:
@foreach (var item in Model.Countries) {
var states = item.states;
states.Select(state => state.population).Sum()
}
Dmitriy关于将逻辑保持在中间层的观点是合理的建议;然而,这些线条在.NET MVC和视图模型模式中变得模糊(这导致了纯粹主义者之间的许多抱怨)。
我的建议是,如果您可以在控制器后面的类中隔离逻辑,那么就这样做。如果对于给定视图不可能,则可以随意向视图添加逻辑。毕竟,这就是语法的用途。
您可能需要执行此操作的时间示例是,如果您将通用视图模型传递给许多视图,但在某些视图中需要进行一些特定的逻辑调整。
祝你好运!