Linq从任何更新Excel表
我想用where子句中的Total Hours值更新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; }
你的陈述有点多余。 另外,员工姓名或收费号码是否唯一? 如果是这样,一个.Single()语句会更合适。 如果他们不是唯一的,我只是做以下几点:
var hours = employeeHours.Where(x => x.EmployeeName == newHours.EmployeeName && x.ChargeNumber == newHours.ChargeNumber)?.FirstOrDefault()?.TotalHours; if (hours != null) sheet.Cells[row, 5] = hours;
注意使用null条件运算符? FirstOrDefault()方法之前和之后。 如果没有符合条件的条目,或者条目的TotalHours属性为空,这将基本上防止抛出空的exception错误。 您也可以使用First()并将其包装在try catch块中,因为如果没有find条目,则First()抛出一个错误(如果没有find条目,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;
- Excel到PDF C#库
- 如何以编程方式打开TSV文件并将其另存为XLSX文件?
- 旧格式或无效的types库。 (从HRESULTexception:0x80028018(TYPE_E_INVDATAREAD))
- 如何validationExcel的范围,它有错误/警告使用.NET?
- 在Excel中更改跟踪
- 什么是sheet = sheetList.FirstOrDefault(ws => ws.Name == string.Format(name,i)); 意思?
- 通过C#(VSTO)/ VBA访问Excel 2010公式编辑器
- 将c#格式的数据保存到excel文件中
- 将数据从excel导入到具有特定条件的DataGridview中