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

如何使用LINQ补全司机任务表的24小时单元格空缺?

使用LINQ补全24小时任务槽的空缺数据

解决方案思路

要实现24个单元格对应一天24小时、自动补全空缺的需求,核心思路是先生成包含24个空时间槽的基础集合,再将数据库查询到的任务匹配填充到对应小时的槽位中,最终得到完整的24元素集合供前端渲染。

具体实现步骤

1. 定义数据传输对象(DTO)

由于原实体类可能存在必填字段,空槽需要默认值,建议创建一个专门的DTO来承载每个小时槽的数据:

public class DriverHourSlot
{
    public int Hour { get; set; } // 对应1-24小时的单元格序号
    public TimeSpan? FromTime { get; set; }
    public TimeSpan? ToTime { get; set; }
    public string Destination { get; set; }
    public bool IsConfirmed { get; set; }
    public string DriverName { get; set; }
}

2. 生成24小时空槽集合

先创建包含1到24小时的空槽列表,每个槽位初始化为默认空值:

// 生成1-24小时的空槽
var hourSlots = Enumerable.Range(1, 24)
    .Select(hour => new DriverHourSlot { Hour = hour })
    .ToList();

3. 查询并关联目标日期的任务数据

从数据库中查询指定日期的司机任务,并关联司机信息(用于前端显示司机姓名):

DateTime targetDate = new DateTime(2022, 8, 23); // 替换为你需要查询的日期
var tasks = _context.driversTasks
    .Where(t => t.AtDate.Date == targetDate) // 匹配日期(忽略时间部分)
    .Include(t => t.driv) // 关联司机表(假设driv是导航属性)
    .OrderBy(t => t.FromTime)
    .ToList();

4. 将任务填充到对应小时槽

根据任务的FromTime确定其所属的小时槽,将任务数据填充到对应槽位:

foreach (var task in tasks)
{
    // 处理00:00的情况,对应24小时槽
    int targetHour = task.FromTime.Hours == 0 ? 24 : task.FromTime.Hours;
    // 找到对应的小时槽
    var targetSlot = hourSlots.First(slot => slot.Hour == targetHour);
    
    // 填充任务数据
    targetSlot.FromTime = task.FromTime;
    targetSlot.ToTime = task.ToTime;
    targetSlot.Destination = task.Destination;
    targetSlot.IsConfirmed = task.IsConfirmed;
    targetSlot.DriverName = task.driv.Name;
}

5. 修改前端渲染代码

将hourSlots作为Model传给前端,修改前端代码以正确渲染24个单元格:

<tbody id="mytable">
    <tr>
        <!-- 仅显示一次司机姓名 -->
        <th scope="row">@Model.FirstOrDefault()?.DriverName ?? ""</th>
        @foreach (var slot in Model)
        {
            <td data-from="@slot.FromTime" data-to="@slot.ToTime">
                @slot.Hour - @(slot.FromTime.HasValue ? slot.FromTime.Value.ToString(@"hh\:mm\:ss") : "")
            </td>
        }
    </tr>
</tbody>

效果说明

  • 生成的hourSlots集合固定包含24个元素,对应1-24小时的单元格,空缺的槽位保持空值。
  • 任务会自动匹配到其起始时间对应的小时槽(例如02:30:00的任务会填充到第2个单元格),解决了你提到的“FromTime从索引2开始”的需求。
  • 前端会渲染出完整的24个单元格,直到第24个槽位,满足填充至索引24的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:54:15