你的if语句有点多余。此外,员工姓名或收费号码是否独一无二?如果是这样,一个.Single()语句会更合适。如果它们不是唯一的,我只需执行以下操作:
var hours = employeeHours.Where(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber)?.FirstOrDefault()?.TotalHours;
if (hours != null)
sheet.Cells[row, 5] = hours;
请注意使用空条件运算符?。 FirstOrDefault()方法之前和之后。如果没有符合条件的条目,或者条目的TotalHours属性为空,这将基本上防止抛出空的异常错误。您也可以使用First()并将其包装在try catch块中,因为如果没有找到条目,则First()抛出错误(如果没有找到条目,FirstOrDefault()将设置值为null)。这里的try/catch语句的方法:
try
{
sheet.Cells[row, 5] = employeeHours.Where(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber).First().TotalHours;
}
catch (Exception)
{
// handle errors here
throw;
}
更新:由于两个EmployeeName和ChargeNumber做出一个唯一的ID彼此一起使用时,我会更新你的代码如下:
var hours = employeeHours.SingleOrDefault(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber)?.TotalHours;
if (hours != null)
sheet.Cells[row, 5] = hours;
这个问题看起来像一个代码审查代码,而不是一个SO问题 – Tola