2016-12-18 2 views
0

Model sind,MVC 5 asp.net Innerhalb Foreach Jeder Summe ähnlicher Daten aus anderer Tabelle

ModelA: 

public int AId  {get;set;} 
public float Amount {get;set;} 

ModelB: 
    public int BId    {get;set;} 
    public float RequestAmount {get;set;} 
    public int AId    {get;set;} 
    public virtual ModelA ModelA {get;set;} 

jetzt, wenn ich die ModelA auflisten möge, gibt es so viele Artikel in Modell B im Zusammenhang ModelA ich will berechnen RequestAmount und Liste in ModelA foreach Liste:

@model IEnumerable<test.Models.ModelA> 


@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.AId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Amount) 
     </td> 
     <td> 
      **Here need to calcut or SUM value from ModelB only related to this** 
     </td> 
    </tr> 

} 
:

public ActionResult Index() 
    { 
     var modelA = db.ModelA.Include(c => c.ModelB); 
     return View(modelA.ToList()); 
    } 

dies die Ansicht sein wird,

+0

Was genau möchten Sie tun? Wo steckst du fest? – Prajwal

+0

Ich muss Wert von ModelB summieren und in jeder foreach Zeile von ModelA anzeigen –

+0

@ Prajwal jede Idee –

Antwort

1

Sie können sowohl die Sammlung als auch das Ergebnis gruppieren und eine Summe erstellen, um das Ergebnis in ein neues Ansichtsmodell zu projizieren.

So das erste Ansicht Modell

public class MyViewModel 
{ 
    public int AId { set;get;} 
    public float Total { set;get;} 
} 

Jetzt in Ihrer Aktionsmethode erstellen,

var data = (from a in db.ModelAs 
      join b in db.ModelBs on a.AId equals b.AId 
       group b by a.AId into g 
    select new MyViewModel { AId = g.Key, Total = g.Select(f=>f.RequestAmount).Sum() }) 

.ToList(); 

Und natürlich jetzt Ihre Sicht auf eine Liste von MyViewModel stark typisiert ist

@model List<MyViewModel> 
@foreach(var item in Model) 
{ 
    <p>@item.AId</p> 
    <p>@item.Total </p> 
} 

Eine andere Option ist, dass Sie eine Sammlung von ModelB derhinzufügen könnenKlasse.

public class ModelA 
{ 
    public int AId  {get;set;} 
    public float Amount {get;set;} 
    public IEnumerable<ModelB> ModelBs {set;get;} 
} 

und verwenden Sie die Erweiterungsmethode Sum.

@model IEnumerable<test.Models.ModelA> 
@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.AId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Amount) 
     </td> 
     <td> 
      @item.ModelBs.Sum(x=>x.RequestAmount) 
     </td> 
    </tr> 

} 
+0

ist '.Sum' Erweiterung für nicht Enumerable Typ verfügbar? –

+1

Behoben. Es tut uns leid. Danke für den Fang von @RajshekarReddy – Shyju