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
相关产品推荐
相关产品推荐

