2016-04-30 11 views
1

モデルクラスと同じ情報を持つViewModelを開発しましたが、ViewModelにAvgAge(すべての人の年齢平均)というフィールドを追加しました。これらのフィールドを持つビュー内のテーブル:すべての人の名前、姓と年齢、テーブルの上すべての人の年齢平均を持つラベルを表示したい。ViewModelを表示する必要があるIEnumerableとして、リスト全体を繰り返して、テーブル上の情報を表示することができます。ここまではすべてうまくいきます。今問題は、私がAge Averageの結果を表示しようとしているときです。それは唯一の結果です。あなたは私に何を提案しますか?ViewのViewModelからの平均値を表示

私はテーブルの人々のリストを表示するために使用しています方法:

public List<PersonAgeAvg> AvgAge() 
     { 
      var list = db.People.Select(x => new PersonAgeAvg 
      { 
       Name = x.Name, 
       LastName = x.LastName, 
       Age = x.Age    
      }).ToList(); 
      return list; 
     } 

私はこのようなクエリで年齢の平均を得ることができます知っているが、どこでこのクエリを使用する必要があります??:

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> 

たぶんソリューションは、AgのみでのViewModelを作成するべきですeAverageフィールドだけど、他の要素の名前、姓、年齢のあとにAgeAverageフィールドを表示する方法がわからない...同じビュー内の異なるViewModelのフィールドを表示することは可能ですか???あなたのビューで

答えて

0

ような何かを行うことができ、この方法は

...同じビューにある2つのモデルまたはのviewmodels以上で作業することができます

コントローラーアクション:

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); 
     } 

とビューをint型:

@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> 
0

私はタプルメソッドを使用してそれをやったこの

@ var avAge=Model.People.Select(p => p.Age).Average(); 
関連する問題