如何显示每个对象的请求总数
How to show the total number of requests from each object
我有来自办公室的请求列表。
型号:
public class Request
{
public int Id { get; set; }
public DateTime Created { get; set; }
public string Office { get; set; } = "";
public string Status { get; set; } = "";
}
控制器:
public IActionResult Requests(int id)
{
var requests = _repo.GetAllRequests();
return View(requests);
}
存储库:
public List<Request> GetAllRequests()
{
return _ctx.Requests.ToList();
}
查看:
@model IEnumerable<Request>
<table>
<thead>
<tr>
<th>Date</th>
<th>Status</th>
<th>Office</th>
</tr>
</thead>
<tbody>
@foreach (var request in Model)
{
<tr>
<th>@request.Created.ToString()</th>
<th>@request.Status</th>
<th>@request.Office</th>
</tr>
}
</tbody>
</table>
我需要一个函数来计算每个办公室的请求数量。
例如,我有 table:
date-status-office:
18feb-opened-101
18feb-opened-102
18feb-closed-103
18feb-opened-101
18feb-opened-101
18feb-closed-103
结果应该是:
101: 3 requests
103: 2 requests
102: 1 request
以防万一,这是一个图形解释:
如何显示每个办公室的总请求数?
您可以使用 GroupBy()
按 Office
对请求进行分组并计算每组的数量。在控制器中你可以做这样的事情 returns 一个匿名对象:
var requests = _repo.GetAllRequests();
var groupedRequests = requests.GroupBy(r => r.Office)
.Select(g => new { Office = g.Key, Count = g.Count() });
在视图中它会是这样的:
@{
var groupedRequests = Model.GroupBy(r => r.Office)
.Select(g => new { Office = g.Key, Count = g.Count() });
}
...
// display however you want
@foreach (var request in groupedRequests)
{
<div>
@request.Office: @request.Count requests
</div>
}
但是,考虑创建一个视图模型来保存您的 Request
数据:
public class ViewModel
{
public List<Request> Requests { get; set; }
public List<RequestSummary> RequestSummaries { get; set; }
}
public class RequestSummary
{
public string Office { get; set; }
public int Count { get; set; }
}
然后在控制器中创建一个 RequestSummary
而不是匿名对象:
public IActionResult Requests(int id)
{
var requests = _repo.GetAllRequests();
var summaries = requests.GroupBy(r => r.Office)
.Select(g => new RequestSummary
{
Office = g.Key,
Count = g.Count()
})
.ToList();
var viewModel = new ViewModel();
viewModel.Requests = requests;
viewModel.RequestSummaries = summaries;
return View(viewModel);
}
更新视图中的模型引用并使用 Model.Requests
和 Model.RequestSummaries
显示数据:
@model ViewModel
...
我有来自办公室的请求列表。
型号:
public class Request
{
public int Id { get; set; }
public DateTime Created { get; set; }
public string Office { get; set; } = "";
public string Status { get; set; } = "";
}
控制器:
public IActionResult Requests(int id)
{
var requests = _repo.GetAllRequests();
return View(requests);
}
存储库:
public List<Request> GetAllRequests()
{
return _ctx.Requests.ToList();
}
查看:
@model IEnumerable<Request>
<table>
<thead>
<tr>
<th>Date</th>
<th>Status</th>
<th>Office</th>
</tr>
</thead>
<tbody>
@foreach (var request in Model)
{
<tr>
<th>@request.Created.ToString()</th>
<th>@request.Status</th>
<th>@request.Office</th>
</tr>
}
</tbody>
</table>
我需要一个函数来计算每个办公室的请求数量。 例如,我有 table:
date-status-office:
18feb-opened-101
18feb-opened-102
18feb-closed-103
18feb-opened-101
18feb-opened-101
18feb-closed-103
结果应该是:
101: 3 requests
103: 2 requests
102: 1 request
以防万一,这是一个图形解释:
如何显示每个办公室的总请求数?
您可以使用 GroupBy()
按 Office
对请求进行分组并计算每组的数量。在控制器中你可以做这样的事情 returns 一个匿名对象:
var requests = _repo.GetAllRequests();
var groupedRequests = requests.GroupBy(r => r.Office)
.Select(g => new { Office = g.Key, Count = g.Count() });
在视图中它会是这样的:
@{
var groupedRequests = Model.GroupBy(r => r.Office)
.Select(g => new { Office = g.Key, Count = g.Count() });
}
...
// display however you want
@foreach (var request in groupedRequests)
{
<div>
@request.Office: @request.Count requests
</div>
}
但是,考虑创建一个视图模型来保存您的 Request
数据:
public class ViewModel
{
public List<Request> Requests { get; set; }
public List<RequestSummary> RequestSummaries { get; set; }
}
public class RequestSummary
{
public string Office { get; set; }
public int Count { get; set; }
}
然后在控制器中创建一个 RequestSummary
而不是匿名对象:
public IActionResult Requests(int id)
{
var requests = _repo.GetAllRequests();
var summaries = requests.GroupBy(r => r.Office)
.Select(g => new RequestSummary
{
Office = g.Key,
Count = g.Count()
})
.ToList();
var viewModel = new ViewModel();
viewModel.Requests = requests;
viewModel.RequestSummaries = summaries;
return View(viewModel);
}
更新视图中的模型引用并使用 Model.Requests
和 Model.RequestSummaries
显示数据:
@model ViewModel
...