我开发了一个ViewModel,它具有与Model Class相同的信息,但是我在ViewModel中添加了一个名为AvgAge的字段(所有人的年龄平均值),我想在视图中显示一个表格字段:所有人的姓名,姓氏和年龄......在表格上方我想显示一个带有所有人的年龄平均值的标签..我需要在View里面声明ViewModel为IEnumerable所以我可以迭代列表并显示表格上的信息..直到这里一切都很好。现在的问题是当我试图显示Age Average的结果时,它只是一个结果..你有什么建议我?
方法我用来显示表格中的人员列表:
public List<PersonAgeAvg> AvgAge()
{
var list = db.People.Select(x => new PersonAgeAvg
{
Name = x.Name,
LastName = x.LastName,
Age = x.Age
}).ToList();
return list;
}
我知道我可以通过这样的查询获得Age Average,但是我应该在哪里使用这个查询?:
AvgAge = db.People.Select(p => p.Age).Average()
查看:
@model IEnumerable<AlexMusicStore.ViewModel.PersonAgeAvg>
@{
ViewBag.Title = "GetPersonAgeAvg";
}
<h2>GetPersonAgeAvg</h2>
<p>
@Html.ActionLink("Create new", "Create")
</p>
<label>Average Age: </label>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.LastName)
</th>
<th>
@Html.DisplayNameFor(model => model.Age)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Age)
</td>
</tr>
}
</table>
也许解决方案应该是只使用AgeAverage字段创建一个ViewModel,但我不知道如何在视图中显示AgeAverage字段之后还有其他元素Name,Lastname和Age ...可以显示来自不同ViewModel的字段在同一个View ???
中答案 0 :(得分:0)
在你看来你可以做这样的事情
@ var avAge=Model.People.Select(p => p.Age).Average();
答案 1 :(得分:0)
我是使用Tuple方法完成的,此方法允许在同一个视图中使用两个模型或ViewModel或更多...
控制器操作:
public ActionResult GetPersonAgeAvg()
{
var avg = ope.AgeAverage();
IEnumerable<Person> pers = db.People.ToList();
var tuple = new Tuple<IEnumerable<Person>, PersonAgeAvg>(pers, avg);
return View(tuple);
}
在视图中:
@model Tuple<IEnumerable<AlexMusicStore.Models.Person>,AlexMusicStore.ViewModel.PersonAgeAvg>
<label>Average Age: </label> @Html.DisplayFor(tuple => tuple.Item2.AvgAge)
<table class="table">
@foreach (var item in Model.Item1)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Age)
</td>
</tr>
}
</table>