如何使用列表将数据集合添加到另一个集合中

时间:2016-10-06 10:47:26

标签: c# asp.net-mvc razor

我想显示与单个实体相关的不同实体的记录。

例如租户有一系列租金,租金又有收款。 我想在视图中显示所有租户的租金和付款。

以下是我在视图中的当前实现。

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

这当前工作正常,但我不想在客户端上进行大量过滤,我认为这不是一个好习惯,所以我想将逻辑移到我的控制器来处理所有记录过滤。

我想要做的是使用列表更改此实现,并将每个集合添加到自己的列表中。例如,付款将在其自己的租金清单中。租金将列在与特定租户相关的列表中。通过这样做,我可以根据租赁状态过滤租金或仅显示实际支付的付款。目前的实施并没有给我这个。

我真的可以在这里使用一些指导方针......

1 个答案:

答案 0 :(得分: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);
    }

在视图中,您将遍历付款:

&#13;
&#13;
@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>
}
&#13;
&#13;
&#13;