Linq的三元运算符 [英] Ternary operator in Linq

查看:779
本文介绍了Linq的三元运算符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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,
                         };

有没有一种方法不重复previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId).FirstOrDefault()逻辑来选择Salary值?

Is there a way not to repeat the previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId).FirstOrDefault() logic to pick Salary value?

我尝试过:

previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId)
                    .FirstOrDefault().Salary ?? default(decimal);

但是,如果previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId).FirstOrDefault()为null,则会引发异常.

But, if previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId).FirstOrDefault() is null, it throws exception.

推荐答案

从所有答案中可以看出,有几种方法可以做到这一点,我的首选方法是:

As witnessed by all of the answers, there are several ways of doing this, my preferred way would be:

var result = from payroll in currentMonthPayroll
             select new SalaryDifference
             {
                 PreviousMonthSalary = previousMonthPayroll
                     .Where(t => t.EmployeeId == payroll.EmployeeId)
                     .Select(prev => prev.Salary)
                     .FirstOrDefault()
             };

这篇关于Linq的三元运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆