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

如何查询MemberData表中每个成员对应的最快时间单条记录

你可以通过按成员分组后取每组最快记录的逻辑实现需求,调整后的代码如下:

public async Task<IActionResult> IndexFastestTimes()
{
    var fastesttimes = await _context.MemberData
        .Where(x => x.Time.Minutes > 0)
        .GroupBy(x => x.Name) // 此处Name为存储成员名称的字段,可替换为你实际使用的字段名
        .Select(g => g.OrderBy(x => x.Time).First())
        .OrderBy(x => x.Time)
        .ToListAsync();
    return View(fastesttimes);
}

逻辑说明

  • 保留原有Where过滤逻辑,仅保留有效时间的记录
  • 调用GroupBy按成员维度分组,将同一个成员的所有成绩归到同一组
  • 对每个成员的分组按时间升序排序后取第一条,即为该成员的最快成绩
  • 最后对所有成员的最快成绩做全局升序排序,得到最终排名结果

兼容写法(适用于旧版本EF Core不支持GroupBy转译的场景)

如果运行时遇到EF Core无法转译查询的报错,可以先把过滤后的有效数据加载到内存再做分组处理:

public async Task<IActionResult> IndexFastestTimes()
{
    var allValidRecords = await _context.MemberData
        .Where(x => x.Time.Minutes > 0)
        .OrderBy(x => x.Time)
        .ToListAsync();
    
    var fastesttimes = allValidRecords
        .GroupBy(x => x.Name)
        .Select(g => g.First())
        .OrderBy(x => x.Time)
        .ToList();
        
    return View(fastesttimes);
}

注意事项

如果你的业务中存在成员重名的情况,建议把GroupBy的分组键换成成员唯一ID字段(比如MemberId),避免重名导致的分组错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:57:06