Подсчитать количество идентификаторов для каждого идентификатора в таблице - PullRequest
0 голосов
/ 19 марта 2020

У меня есть две таблицы. Один из них - бронирование, а другой - курс. Курс может иметь много бронирований. Я хочу посчитать количество заказов для каждого курса и передать его ViewBag. Поэтому я хочу посчитать, сколько пользователей подало заявку на каждый курс.

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

ViewBag.Counter = db.Bookings.Count();

Эта строка возвращает все курсы на мою страницу указателя.

 IEnumerable<Course> courses = cr.GetCourses();
        return View(courses.ToList());

И это контролер, который выполняет эту работу. Я попытался с 2 циклами foreach, но не могу заставить его работать.

   public ActionResult Index()
    {
        Booking booking = new Booking();
        Course course = new Course();
        List<Course> listCourses = new List<Course>();
        List<Booking> bookings = new List<Booking>();

        foreach (var item in listCourses)
        {
            int id = course.CourseId;

            foreach (var item1 in bookings)
            {
                ViewBag.Counter = db.Bookings.Where(x => x.CourseId == id).Count();
            }
        }
        IEnumerable<Course> courses = cr.GetCourses();
        return View(courses.ToList());
    }

Я ожидаю получить количество пользователей, которые подали заявки на каждый курс, указанный в моей странице указателя. У меня нет исключений или ошибок, и на мой взгляд, ничего не видно. Когда я использую ViewBag.Counter = db.Bookings.Count();, я получаю общее количество пользователей, которые подали заявки на все доступные курсы. Модель в представлении - это модель курса, которая связана с резервированием с отношением один ко многим.

Это представление для моего ActionResult.

@model IEnumerable<Entities.Course>
@{
ViewBag.Title = "AlgebraSchoolApp";
}

<h2>Dobrodošli!</h2>
<p>
Da bi se prijavili na neki od naših tečajeva kliknite na link prijave: 
<button>
    @Html.ActionLink("Prijava","Create","Booking")
</button>
</p>

<h2> Svi tečajevi</h2>
<table class="table">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.CourseName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Description)
    </th>
    <th>
        @Html.DisplayName("Broj polaznika")
    </th>
</tr>

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CourseName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Description)
        </td>
        <td>
            @ViewBag.Counter
        </td>
    </tr>
}


</table>

<h2>Slobodni tečajevi</h2>
<table class="table">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.CourseName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Description)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Date)
    </th>
</tr>
@foreach (var item in Model.Where(x => x.Full == false))
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CourseName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Description)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Date)
        </td>
    </tr>
}
</table>

1 Ответ

1 голос
/ 19 марта 2020

Причина, по которой ViewBag.Counter показывает одинаковый результат для всех курсов, заключается в том, что он каждый раз перезаписывается с помощью ViewBag.Counter = db.Bookings.Where(x => x.CourseId == id).Count();.

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

public class CourseViewModel 
{
    public string CourseName { get; set; }
    public string Description { get; set; }
    //etc
    public int BookingCount { get; set; }
}

Контроллер:

public ActionResult Index()
{
    var courses = cr.GetCourses();
    var courseViewModels= new List<CourseViewModel>();
    foreach (var course in courses )
    {
        var bookingCount = db.Bookings.Where(x => x.CourseId == course.CourseId).Count();
        courseViewModels.Add(new CourseViewModel{
            CourseName = course.CourseName, //Add all the vm properties
            BookingCount = bookingCount
        });
    }

    return View(courseViewModels);
}

На виде:

@model IEnumerable<CourseViewModel>
@/*...*/
@foreach (var item in Model)

{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CourseName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Description)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.BookingCount )
        </td>
    </tr>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...