我对编程还很陌生,但我的任务是维护一些由前员工创建的应用程序。我有一个 ?: 声明现在需要处理的不仅仅是真或假声明,但我不确定如何去做。有问题的代码是:
MailDomainContext mail = new MailDomainContext();
mail.Load(mail.GetMailsQuery("Workforce Attendence Issue",
loadEmp.Entities.Where(emp => emp.EmployeeID == _EmployeeID).First().Username,
(loadEmp.Entities.Where(emp => emp.EmployeeID == _EmployeeID).First().EmployeeShiftID >= 2 ? "supervisor1" : "supervisor2"),
loadEmp.Entities.Where(emp => emp.EmployeeID == _EmployeeID).First().FirstName,
attendence.AttendenceDate.ToString("MM/dd/yyyy"),
attendence.TimeLost,
loadAbs.Entities.Where(abs => abs.AbsenceID == attendence.AbsenceID).First().AbsenceDescription,
(from inf in loadAtt.Entities
where inf.EmployeeID == _EmployeeID
where inf.AttendenceDate > DateTime.Now.AddDays(30 * -1)
where inf.Approved == false
select inf).Count() + 1,
attendence.UTOUsed
), null, null);
更具体地说,这一行:
(loadEmp.Entities.Where(emp => emp.EmployeeID == _EmployeeID).First().EmployeeShiftID >= 2 ? "supervisor1" : "supervisor2"),
我需要在列表中再添加 4 名主管,但还没有想出一种不会让其他一切不愉快的方法。如果这个问题太简单,或者我遗漏了一些您可能需要知道的细节,我深表歉意,因为我说过我对这一切都很陌生。
最佳答案
此代码不必要地难以维护,而且效率低下且防御性差。代码正在检索员工 3 次。
loadEmp.Entities.Where(emp => emp.EmployeeID == _EmployeeID).First().Username
如果具有 _EmployeeID
的员工不存在,则上面的行(和其他行)将抛出异常。相反,您可以使用 FirstOrDefault
或 SingleOrDefault
如果您希望只有一名员工具有该 ID(应该是这种情况,因为它看起来像是该 ID 的主键实体)。如果 loadEmp
实际上是一个 Entity Framework DbContext
那么您也可以使用 Find
。
您可以执行一次此查询并将结果存储在局部变量中。
var employee = loadEmp.Entities.SingleOrDefault(emp => emp.EmployeeID == _EmployeeID);
if (employee == null)
{
// Handle employee not found
}
然后要根据员工获取主管字符串,您可以创建一个方法,该方法采用计算主管字符串所需的最少信息量,并将其传递给该方法以获取结果。
GetSupervisorRole(employee.EmployeeShiftID);
...
private string GetSupervisorRole(int employeeShiftID)
{
// Logic here
}
关于c# - 转变 ? : statement to handle more than 2 answers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12221465/