Как получить данные .Include в MVC C#? - PullRequest
1 голос
/ 10 января 2020

У меня есть этот метод действия, который возвращает IQueryable для представления.

    public ActionResult Index()
    {
        var cafeTableDetails = db.CafeTableDetails.Include(c => c.CafeTable).Include(c => c.Food);

        return View(cafeTableDetails.ToList());
    }

и в моем представлении

@model IEnumerable<MVC_Cafe.Models.CafeTableDetails>

<table class="table">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.CafeTable.TableNo)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Food.FoodName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Quantity)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.TotalAmount)
    </th>
    <th></th>
</tr>

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CafeTable.TableNo)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Food.FoodName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Quantity)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.TotalAmount)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.Id })
        </td>
    </tr>

}
<tr>
    <td colspan="5"></td>
</tr>
</table>

Я могу отобразить представление, но теперь я не могу понять Как отобразить итоговый порядок после каждого l oop в последнем теге tr. Общая сумма хранится в CafeTable. Вот моя модель

public class CafeTable
{
    public int Id { get; set; }
    public string TableNo { get; set; }
    public TableStatus TableStatus { get; set; }
    public decimal TableAmount { get; set; }
    public int TotalOrders { get; set; }

    // Navigation Properties
    public ICollection<CafeTableDetails> CafeTableDetails { get; set; }
}

public enum TableStatus
{
    Empty, Occupied
}

public class CafeTableDetails
{
    public int Id { get; set; }
    public int CafeTableId { get; set; } // FK
    public int FoodId { get; set; } // FK
    public int Quantity { get; set; }
    public decimal TotalAmount { get; set; }

    // Navigation Properties
    public CafeTable CafeTable { get; set; }
    public Food Food { get; set; }
}

Я мог бы на это внутри для каждого l oop, но не уверен, как добавить его снаружи для каждого l oop

@Html.DisplayFor(modelItem => item.CafeTable.TableAmount)

1 Ответ

1 голос
/ 10 января 2020

Вы должны создать CafeTableViewModel, как показано ниже

public class CafeTableViewModel
{
    public int TotalOrders { get; set; }
    public List<CafeTableDetails> CafeTableDetails { get; set; }
}

В Index действии вы можете получить таким образом

public ActionResult Index()
{
    var cafeTableDetails = db.CafeTableDetails.Include(c => c.CafeTable).Include(c => c.Food);
    var totalOrders = cafeTableDetails.Sum(p => p.TotalAmount);
    var viewModel = new CafeTableViewModel 
                    { TotalOrders = totalOrders, CafeTableDetails = cafeTableDetails.ToList()}
    return View(viewModel);
}
...