c# - Linq 中的三元运算符

标签 c# 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 值?

我试过:

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

但是,如果 previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId).FirstOrDefault() 为空,它会抛出异常。

最佳答案

您可以使用 Enumerable.DefaultIfEmpty

previousMonthPayroll.Where(t => t.EmployeeId == payroll.EmployeeId)
                    .DefaultIfEmpty(yourDefaultObject)
                    .First();

其中 yourDefaultObject 是一个默认薪水为 default(decimal) 的对象。

关于c# - Linq 中的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559242/

相关文章:

c# - 如何在 LINQ 中询问 "Is there exactly one element satisfying condition"?

数组变量的 C# HttpGet 语法 - 尝试过{值 :double[]} complains about brackets

c# - 用于在不更改代码库的情况下处理不同本体的库

c# - 有没有更快的方法来检查 LINQ to XML 中的 XML 元素?

Linq 查询在 EF 中的内部选择上有两个连接

c# - 将带名称和不带名称的命名空间添加到 XElement

c# - Enumerable.Repeat with Union and Take 不返回 'Take' 值

c# - 如果您从 List<T> .Remove() 中删除特定项目,它是否也会删除 'empty slot' ?

c# - 将 ItemsSource 中元素的属性绑定(bind)到标签内容

c# - 如何减少对通用缓存存储库中的读者的锁定?