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

CSHTML中按PlayerId执行GroupBy时IGrouping无Player定义报错如何解决

问题原因

调用GroupBy(x => x.PlayerId)后返回的每个遍历对象是IGrouping<int, Stat>类型,本质是同一个PlayerId下所有Stat数据的集合,并非单个Stat实例,Player、Team以及各数据字段都是Stat类的属性,直接对分组集合访问这些属性自然会抛出找不到成员的报错。

解决方案

你需要的是按球员分组汇总各数据的合计值,修改视图中的循环逻辑即可:分组后先取分组内第一条Stat记录读取球员、球队信息(同一PlayerId对应的球员、球队信息完全一致),再对分组内所有Stat的数值字段做聚合求和。

修改后的视图循环代码如下:

@foreach (var group in Model.GroupBy(x => x.PlayerId))
{
    // 取分组内第一条记录读取关联的球员、球队信息
    var statSample = group.First();
    <tr>
        <td width="10%">@statSample.Player.FirstName @statSample.Player.LastName</td>
        <td width="10%">@statSample.Team.TeamName</td>
        <td width="10%">@group.Sum(s => s.Points)</td>
        <td width="10%">@group.Sum(s => s.Rebounds)</td>
        <td width="10%">@group.Sum(s => s.Assists)</td>
        <td width="10%">@group.Sum(s => s.Steals)</td>
        <td width="10%">@group.Sum(s => s.Blocks)</td>
    </tr>
}
性能优化建议

你当前控制器中是先查询所有Stat记录,再循环查询每条记录关联的Player、Team,会产生大量额外的数据库请求,可直接用EF Core的Include方法一次性预加载关联数据,修改控制器中对应查询逻辑即可:

// 以TotStats方法为例,Index方法同理
public IActionResult TotStats()
{
    IEnumerable<Stat> objList = _db.Stats
        .Include(s => s.Player)
        .Include(s => s.Team)
        .ToList();
    return View(objList);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:54:04