var result = from payroll in currentMonthPayroll
select new SalaryDifference
{
PreviousMonthSalary = previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId).FirstOrDefault() == null ?
default(decimal) : previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId).FirstOrDefault().Salary,
};
Run Code Online (Sandbox Code Playgroud)
有没有办法不重复previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId).FirstOrDefault()选择Salary值的逻辑?
我试过:
previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId)
.FirstOrDefault().Salary ?? default(decimal);
Run Code Online (Sandbox Code Playgroud)
但是,如果previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId).FirstOrDefault()为 null,则会抛出异常。
您可以使用Enumerable.DefaultIfEmpty
previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId)
.DefaultIfEmpty(yourDefaultObject)
.First();
Run Code Online (Sandbox Code Playgroud)
其中yourDefaultObject是默认工资为 的对象default(decimal)。
正如所有答案所证明的那样,有多种方法可以做到这一点,我首选的方法是:
var result = from payroll in currentMonthPayroll
select new SalaryDifference
{
PreviousMonthSalary = previousMonthPayroll
.Where(t => t.EmployeeId == payroll.EmployeeId)
.Select(prev => prev.Salary)
.FirstOrDefault()
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21301 次 |
| 最近记录: |