Сумма свойства свойства навигации в Entity Framework - PullRequest
0 голосов
/ 29 января 2019

Я хотел бы суммировать данные, отображаемые на веб-странице, из столбца.

Я попытался использовать

ViewBag.Total = bookingdb.Packages.Sum(x => x.PkgBasePrice);

, что, очевидно, дает мне сумму данных в базе данных,

И я также попытался

@Model.Sum(i => i.Package.PkgBasePrice)

, где я получаю ошибку исключения NULL.

У меня есть 3 таблицы, пакеты заказов и клиенты через EF.

Форма просмотра имеет резервирование родительской таблицы, поэтому, если я пытаюсь добавить что-либо еще, например,

@Model.Sum(i => i.TravelerCount)

, это работает, и проблема в том, когда он идет как i.table.column, который выдает ошибку.

Я хотел бы суммировать все данные PkgBasePrice, показанные на веб-странице, поскольку эти числа фильтруются по клиентам и повторяются, поэтому суммирование по базе данных не вариант.

Это из представления

@model IEnumerable<Online.Models.Booking>
@{
  ViewBag.Title = "Bookings";
}



@*<h1>Welcome @Session["CustomerId"].ToString()</h1>*@
<h1>Welcome @Session["Username"].ToString()</h1>

<p>
<h2> Your Bookings </h2>
</p>
<table class="table">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.BookingDate)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.BookingNo)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.TravelerCount)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Customer.CustFirstName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Customer.CustLastName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Package.PkgName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.PkgBasePrice)
    </th>
    <th></th>
</tr>

   @foreach (var item in Model.Where(ModelItem => 
 ModelItem.CustomerId.Equals(Session["CustomerId"])))
 {
    <tr>
        @*<td>
                @Html.DisplayFor(modelItem => item.Customer.CustomerId)
            </td>*@
        <td>
            @Html.DisplayFor(modelItem => item.BookingDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.BookingNo)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.TravelerCount)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Customer.CustFirstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Customer.CustLastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Package.PkgName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Package.PkgBasePrice)
        </td>
        <td>
            @Html.ActionLink("Package Details", "Details", new { id = 
item.BookingId })
        </td>
    </tr>

}
</table>
@Model.Sum(i => i.Package.PkgBasePrice) //doesn't Work
<div> @ViewBag.Total </div>
<div>
@Html.ActionLink("Personal Information", "Customer", "Customer")
</div>

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Проблема заключается в том, что при загрузке Booking List в методе контроллера не загружается соответствующая Package для каждого Booking.Чтобы загрузить соответствующие Package для каждого Booking в Booking List, вы можете использовать Incldue следующим образом:

var bookingList = bookingdb.Bookings.Include(b= > b.Package).ToList();
return View(bookingList);

Кроме того, чтобы Booking должен содержать Package, напишитеВаш запрос следующим образом.В противном случае, если любой Booking не содержит Package, он выдаст исключение нулевой ссылки во время Sum.

@Model.Where(b => b.Package != null).Sum(i => i.Package.PkgBasePrice)

Надеюсь, это сработает для вас сейчас.

0 голосов
/ 29 января 2019

Первый вопрос, который я хотел бы задать: «Откуда вы берете данные?Получаете ли вы доступ к сущностям прямо с вашей точки зрения? »

Если это так, я бы категорически не одобрял это.Вам лучше использовать модели представлений и заполнить эту модель представлений на бизнес-уровне.Ваши представления должны быть просто привязаны к модели представления и отображать ее значения;Вы не должны смешивать логику в своем представлении таким образом.

Второй вопрос: «Вы добавляете включения для дополнительных свойств навигации»?Иногда нулевые значения могут быть вызваны тем, что свойство навигации не включено в базовый запрос.

По сути, я не думаю, что здесь достаточно информации, чтобы полностью помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...