2016-04-30 15 views
1

Ich habe ein ViewModel mit den gleichen Informationen einer Model-Klasse entwickelt, aber ich habe dem ViewModel ein Feld namens AvgAge (Age Average aller Personen) hinzugefügt, das ich anzeigen möchte eine Tabelle in der Ansicht mit diesen Feldern: Name, Nachname und Alter aller Personen ... und über der Tabelle möchte ich ein Label mit dem Age Average aller Personen anzeigen .. Ich muss dies innerhalb des ViewModel deklarieren als IEnumerable also kann ich über die Liste iterieren und die Informationen auf dem Tisch anzeigen .. bis hier alles super funktioniert. Jetzt ist das Problem, wenn ich versuche, das Ergebnis des Altersdurchschnitts zu zeigen, ist es nur ein Ergebnis .. Was schlägst du mir vor?Anzeige Durchschnittswert von ViewModel in View

Methode Ich bin mit der Liste der Personen, die in der Tabelle angezeigt werden:

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

Ich weiß, ich kann den Alten Durchschnitt mit einer Abfrage wie diese erhalten, aber wo soll ich diese Abfrage ??:

AvgAge = db.People.Select(p => p.Age).Average() 

Ausblick:

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

Vielleicht sollte eine Lösung, die ein Ansichtsmodell zu erstellen und nur mit dem Ag eAverage-Feld, aber ich weiß nicht, wie man das AgeAverage-Feld in der Ansicht nach mit den anderen Elementen Name, Nachname und Alter zu ... zeigt. Ist es möglich, Felder aus verschiedenen ViewModels in derselben Ansicht anzuzeigen ???

Antwort

0

ich es das Tuple Methode tat tun kann, ermöglicht diese Methode mit zwei Modellen oder Viewmodels oder mehr bei der gleichen Ansicht zu arbeiten ...

Controller Aktion:

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

Und int die Ansicht:

@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

in Ihrer Ansicht, die Sie so etwas wie dieses

@ var avAge=Model.People.Select(p => p.Age).Average(); 
Verwandte Themen