如何显示每个对象的请求总数

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.RequestsModel.RequestSummaries 显示数据:

@model ViewModel
...