2016-10-06 3 views
-1

Я хочу отображать записи разных объектов, относящихся к одному объекту.Как добавить коллекцию данных в другую коллекцию, используя список

У арендатора, например, есть сбор арендной платы, в аренду в свою очередь есть сбор платежей. Я хочу показать на виду всех арендаторов с арендной платой и платежами.

Вот моя текущая реализация на мой взгляд.

@foreach (var t in Model.Tenants) 
{ 
    <tr> 
     <td>@t.Fullname</td> 
     @foreach (var rents in t.Rents) 
     { 
      <td>@rents.Apartment.BedroomType</td> 
      <td>@rents.Apartment.MonthlyFee.ToString("N0")</td> 
      <td>@($"{@rents.Total.ToString("N0")}/{@rents.Type}")</td> 
      <td>@($"{@rents.DueDate.ToString("MMM yyy")}")</td> 
      foreach (var payments in rents.Payments) 
      { 
       <td>@payments.PaymentDate.ToString("MMM dd,yyyy")</td> 
       <td>@payments.AmountPaid.ToString("N0")</td> 
       <td>@payments.Balance</td> 
      } 
     } 
    </tr> 
} 

Это в настоящее время работает нормально, но я не хочу делать много фильтрации на клиенте, который я думаю, что его не очень хорошая практика, поэтому я хочу, чтобы переместить логику в мой контроллер для обработки всех фильтрации записей.

Что я хочу сделать, это изменить эту реализацию, используя список, и добавить каждую коллекцию в свой собственный список. Платежи, например, были бы в его собственном списке, касающемся его аренды. Арендная плата будет в своем собственном списке, относящемся к конкретному арендатору. Делая это, я могу, возможно, фильтровать арендную плату на основе статуса аренды или только показывать платежи, которые были фактически оплачены. Эта текущая реализация не дает мне этого.

я мог бы реально использовать некоторую помощь с руководящими принципами здесь ...

+2

Что вы имеете в виду _filtering на frontend_? Насколько я могу судить, вы ничего не фильтруете. Уточните для меня, пожалуйста, какой желаемый результат будет: хотите ли вы иметь 3 отдельных списка, один с арендаторами, один с арендной платой и один с платежами? Как именно вы хотите отображать эти списки? –

+0

Также, сервер, который визуализирует эту логику на клиенте ..... – Hackerman

ответ

0

Я хотел бы сказать вам просто нужно сделать небольшое изменение. В вашей модели просмотра есть список платежей, а не арендаторов (делайте это наоборот). Посмотрите на примере ниже для идеи того, что я имею в виду:

[HttpGet] 
    public ActionResult Index(string bedRoomType = "", double amountPaid = 0) 
    { 
     var viewModel = new TenantIndexVm(); 
     using (var context = new RentEntities()) 
     {     
      viewModel.Payments = context.Payment.Where(x => (x.Rent.BedRoomType == bedRoomType || bedRoomType == "") && (x.AmountPaid >= amountPaid)).Include("Rent.Tenant"); 
     } 
     return View(viewModel); 
    } 

В представлении вы Переберите платежей:

@foreach (var p in Model.Payments) 
 
{ 
 
    <tr> 
 
     <td>@p.Rent.Tenant.Fullname</td> 
 
     <td>@p.Rent.Apartment.BedroomType</td> 
 
     <td>@p.Rent.Apartment.MonthlyFee.ToString("N0")</td> 
 
     <td>@($"{@p.Rent.Total.ToString("N0")}/{@p.Rent.Type}")</td> 
 
     <td>@($"{@p.Rent.DueDate.ToString("MMM yyy")}")</td> 
 
     <td>@p.PaymentDate.ToString("MMM dd,yyyy")</td> 
 
     <td>@p.AmountPaid.ToString("N0")</td> 
 
     <td>@p.Balance</td> 
 
    </tr> 
 
}

Смежные вопросы