You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC中如何基于Distinct生成含客户状态统计的表格?

解决客户状态统计表格的问题

看起来你当前的代码仅获取了去重后的客户列表,但还没实现每个客户各状态的数量统计功能。我来帮你完善整个逻辑,分Controller和View两部分落地:

第一步:完善Controller的统计逻辑

你需要对数据按vchClient分组,再在每个分组内统计不同vchStatus的记录数,同时保留你原本的日期筛选逻辑。调整后的代码如下:

public ActionResult ReportesClient(String fromDay = null, String toDay = null)
{
    var query = entidad.tblKaizens.AsQueryable();

    // 处理日期筛选:先验证日期格式有效性
    if (!string.IsNullOrEmpty(fromDay) && !string.IsNullOrEmpty(toDay))
    {
        if (DateTime.TryParse(fromDay, out DateTime startDate) && DateTime.TryParse(toDay, out DateTime endDate))
        {
            // 替换这里的`DateField`为你模型中实际的日期字段(比如dtCreated)
            query = query.Where(r => r.DateField >= startDate && r.DateField <= endDate);
        }
    }

    // 分组统计:按客户分组,再统计各状态的数量
    var clientStatusStats = query
        .GroupBy(r => r.vchClient)
        .Select(g => new 
        {
            ClientName = g.Key,
            // 将每个客户的状态-数量映射为字典,方便View调用
            StatusCounts = g.GroupBy(s => s.vchStatus)
                            .ToDictionary(sg => sg.Key, sg => sg.Count())
        })
        .ToList();

    return View(clientStatusStats);
}

第二步:在View中渲染统计表格

创建对应的View(比如ReportesClient.cshtml),把统计数据渲染成清晰的表格,支持动态展示所有状态列:

@{
    ViewBag.Title = "客户状态统计报表";
}

<h2>客户状态统计报表</h2>

<table class="table table-bordered">
    <thead>
        <tr>
            <th>客户名称</th>
            <!-- 动态获取所有唯一状态,避免硬编码表头 -->
            @{
                var allStatuses = Model.SelectMany(m => m.StatusCounts.Keys).Distinct();
                foreach (var status in allStatuses)
                {
                    <th>@status</th>
                }
            }
            <th>总记录数</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var client in Model)
        {
            <tr>
                <td>@client.ClientName</td>
                @foreach (var status in allStatuses)
                {
                    <!-- 若客户无该状态记录,显示0 -->
                    <td>@(client.StatusCounts.TryGetValue(status, out var count) ? count : 0)</td>
                }
                <td>@client.StatusCounts.Sum(kv => kv.Value)</td>
            </tr>
        }
    </tbody>
</table>

额外提示

  • 记得把代码中的DateField替换为你模型里实际的日期字段名称(比如dtCreated)
  • 如果你的vchStatus是固定枚举值,可以直接硬编码表头,这样性能会更优
  • 可以在页面添加日期筛选表单,让用户输入起始/结束日期后提交到这个Action

内容的提问来源于stack exchange,提问作者Jorge Reyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:34:52