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の場合、null例外エラーが発生しないようになります。 First()は、エントリが見つからない場合にFirst()がエラーをスローするため、First()を使用してtry catchブロックでラップすることもできます(エントリが見つからない場合、FirstOrDefault()ここでの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;
この質問は、私の質問ではなくコードレビューコードのように見えます – Tola