c# - 转变 ? : statement to handle more than 2 answers

标签 c# linq

我对编程还很陌生,但我的任务是维护一些由前员工创建的应用程序。我有一个 ?: 声明现在需要处理的不仅仅是真或假声明,但我不确定如何去做。有问题的代码是:

    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 的员工不存在,则上面的行(和其他行)将抛出异常。相反,您可以使用 FirstOrDefaultSingleOrDefault 如果您希望只有一名员工具有该 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/

相关文章:

c# - 在后台运行 Mono 应用程序时,我可以检测到缺少控制台吗?

c# - 自动生成接口(interface)的实现(没有类的代理)

c# - Queryable.Aggregate 不适用于空值

linq - LINQ(对象)何时过度使用?

c# - 在 linq 中使用 GroupBy 时,如何获取组名列表?

c# - 如何按数字顺序排列文件的内容?

c# - 如何向现有 Winforms 控件添加属性

LINQ to SQL——最好的学习资源?

c# - Linq:如何获取二级节点的值

c# - AutoMapper - 映射不起作用