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

C#中如何按DateReference日期分组并返回对象?

按日期分组Registration记录的高效查询方案

EF Core/LINQ 实现

直接通过LINQ的GroupBy方法,基于DateReference的日期部分分组,EF Core会将逻辑转换为数据库原生SQL执行,避免内存分组的性能损耗:

// 异步查询,按日期分组并获取当天所有记录
var groupedData = await _dbContext.Registrations
    .GroupBy(reg => reg.DateReference.Date)
    .Select(group => new
    {
        GroupDate = group.Key,
        DailyRecords = group.ToList()
    })
    .ToListAsync();

原生SQL 实现

如果需要直接写SQL,可通过CAST(DateReference AS DATE)提取日期作为分组键,同时支持将当天记录打包为JSON数组(以SQL Server为例):

SELECT
    CAST(DateReference AS DATE) AS GroupDate,
    (
        SELECT MinuteWorked, Status 
        FROM Registrations r_sub 
        WHERE CAST(r_sub.DateReference AS DATE) = CAST(r_main.DateReference AS DATE)
        FOR JSON PATH
    ) AS DailyRecords
FROM Registrations r_main
GROUP BY CAST(DateReference AS DATE);

性能优化关键

因为表中有20万+记录,必须确保查询高效:

  • 给DateReference字段创建非聚集索引,并包含查询需要返回的字段(MinuteWorked、Status),让数据库可以直接通过索引完成分组,避免全表扫描:
CREATE NONCLUSTERED INDEX IX_Registrations_DateReference 
ON dbo.Registrations (DateReference)
INCLUDE (MinuteWorked, Status);
  • 绝对不要先将全表数据加载到内存再分组,这会导致内存占用过高且速度极慢,必须让分组逻辑在数据库端执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:20:57