Linq从任意更新excel表格

本文关键字:excel 表格 更新 任意 Linq | 更新日期: 2023-09-27 18:16:29

我想用where子句中的总小时值更新Excel单元格。我知道我现在做这件事的方式非常低效。如何更改Linq语句以提高性能?

if (employeeHours.Any(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber))
{
    sheet.Cells[row, 5] = employeeHours.Where(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber).FirstOrDefault().TotalHours;
}

Linq从任意更新excel表格

你的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属性为空,这将从本质上防止抛出null异常错误。您还可以使用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;
}

Update:由于EmployeeName和chargennumber在相互使用时都是唯一的Id,我将更新您的代码如下:

var hours = employeeHours.SingleOrDefault(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber)?.TotalHours;
if (hours != null)
    sheet.Cells[row, 5] = hours;