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

C#中使用foreach循环在SubmitChanges后更新字段问题求助

员工排班:按顺序为日期分配可用员工问题解决

问题原因分析

你当前的分配代码逻辑存在问题:每遍历一个员工,就把所有未分配的日期记录(EmpName为null的ResultTB)全部绑定到该员工。第一次循环就会把所有空记录填满第一个员工的信息,后续员工循环时已经没有未分配的记录,最终导致所有日期都被第一个员工占据。

修正后的代码实现

我们需要按顺序为每个未分配日期匹配下一个可用员工,员工数量不足时循环分配(比如员工A→员工B→员工A→员工B...这样轮班):

// 获取状态为"possible"的员工列表
var empList = db.EmployeeTBs.Where(x => x.EmpStatus == "possible").ToList();
// 获取未分配员工的日期记录
var unassignedDates = db.ResultTBs.Where(r => r.EmpName == null).ToList();

// 遍历未分配日期,按顺序分配员工
for (int i = 0; i < unassignedDates.Count; i++)
{
    // 通过取模运算实现员工循环分配
    var currentEmp = empList[i % empList.Count];
    var dateRecord = unassignedDates[i];
    
    dateRecord.EmpID = currentEmp.EmpID;
    dateRecord.EmpName = currentEmp.EmpName;
}

// 一次性提交所有修改
db.SubmitChanges();
// 更新数据源
DGVResult.DataSource = db.ResultTBs.ToList();

额外优化:日期填充代码简化

你之前的日期填充代码存在冗余逻辑,可以简化成更清晰的版本:

var startDate = DateTime.Parse(txtFromDate.Text);
var endDate = DateTime.Parse(txtToDate.Text);

// 遍历从开始到结束的所有日期
for (var date = startDate; date <= endDate; date = date.AddDays(1))
{
    var newRecord = new ResultTB
    {
        NameOfDay = date.DayOfWeek.ToString(),
        DateOfDay = date
    };
    db.ResultTBs.InsertOnSubmit(newRecord);
}

db.SubmitChanges();
DGVResult.DataSource = db.ResultTBs.ToList();

内容的提问来源于stack exchange,提问作者Mohammed D. Q

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:25:41