C# 计算表中每个id的id数
我有两张桌子。一个是预订,另一个是课程。这门课可以有很多预约。 我想计算每个课程的预订数量,并将其传递给ViewBag。所以我想计算一下每门课程有多少用户申请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.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>
}