2016-12-18 1 views
0

модели,MVC 5 asp.net Внутри Foreach Каждая сумма Связанные данные из другой таблицы

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

теперь, когда я хочу перечислить Modela, там много пункт в ModelB связанных Modela я хочу, чтобы вычислить RequestAmount и список в списке Еогеасп Modela:

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

это будет вид:

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

} 
+0

Что именно вы хотите сделать? Где вы застряли? – Prajwal

+0

Мне нужно суммировать значение из ModelB и показывать в каждой строке foreach ModelA –

+0

@Prajwal любая идея –

ответ

1

Вы можете присоединиться к коллекции и сгруппировать результат и выполнить Sum, спроецировать результат на новую модель представления.

Так создать модель представления первого

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

Теперь в методе действия,

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

И, конечно, теперь ваша точка зрения сильно типизированных к списку MyViewModel

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

Другим вариантом является то, что вы можете добавить коллекцию ModelB в ModelA класс.

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

и использовать метод расширения 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

является расширением '.Sum' для неперечислимого типа? –

+1

Исправлено. Сожалею. Спасибо, что поймали @RajshekarReddy – Shyju