C# 计算表中每个id的id数

C# 计算表中每个id的id数,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有两张桌子。一个是预订,另一个是课程。这门课可以有很多预约。 我想计算每个课程的预订数量,并将其传递给ViewBag。所以我想计算一下每门课程有多少用户申请 ViewBag.Counter = db.Bookings.Count(); 这一行统计总的预订数量,但我不知道如何为每门课程做到这一点 ViewBag.Counter = db.Bookings.Count(); 这一行将所有课程都显示在我的索引页上 IEnumerable<Course> courses = cr.G

我有两张桌子。一个是预订,另一个是课程。这门课可以有很多预约。 我想计算每个课程的预订数量,并将其传递给ViewBag。所以我想计算一下每门课程有多少用户申请

ViewBag.Counter = db.Bookings.Count();
这一行统计总的预订数量,但我不知道如何为每门课程做到这一点

ViewBag.Counter = db.Bookings.Count();
这一行将所有课程都显示在我的索引页上

 IEnumerable<Course> courses = cr.GetCourses();
        return View(courses.ToList());
ViewBag.Counter显示所有课程的相同结果的原因是,它每次都被ViewBag.Counter=db.Bookings.Wherex=>x.CourseId==id.Count;覆盖

如果我了解您的问题,可以通过创建新的视图模型来修复此问题,以存储课程所需的信息,并将其返回到您的视图。例如:

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

你能详细说明一下你的代码是如何工作的吗?你在期待什么,到底发生了什么?如果您遇到异常/错误,请发布发生该异常/错误的行以及可以使用。请将您的问题添加到其中,否则我们可能无法提供帮助。实际上只有Index方法的最后两行起作用。循环在空集合上枚举,而booking和course变量从未使用过。似乎您可以在bookings上使用GroupBy:db.bookings.GroupByb=>b.CourseId,然后如果需要将它们关联起来,您将拥有每个课程的计数,其中group key是课程id。感谢您的回复!因此,我在listCourses{ViewBag.Counter=db.Bookings.Whereb=>b.CourseId==item.CourseId.count;}中设法使用foreach循环进行计数,就像这个foreach变量项一样,但仍然没有得到正确的结果。假设一个班有两个学生,另一个班有一个学生。我的代码只计算一个类,并在列表中的两个位置显示它。感谢您的帮助,它可以按照我的要求工作。我以前发现过这个,但我想我可以在没有其他模型的情况下工作。这是解决这类问题的最佳实践吗?假设管理员选择哪个用户将被emloyed,最简单的方法是添加一个模型,然后从中执行该操作?@brika28是的,最好的做法是传递一个单独的视图模型,而不是上下文类。它还允许您添加与课程相关但未存储在数据库中的属性,如BookingCount,或删除代码中不需要的内容。以及其他好处,例如使代码更易于维护。
@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>
}