如果在linq中的三元运算符中满足条件,则执行多个运算

时间:2012-09-06 09:37:03

标签: linq

我是LINQ的初学者。我希望执行一些条件操作,然后

(from emp in Employees 
let DOB=emp.BirthDate.GetValueOrDefault()
let year=DOB.Year
let month=DOB.Month
let EmpAgeInYearsToday=DateTime.Now.Year-year
let EmpAgeInMonthToday=DateTime.Now.Month-month
let temp_year=(EmpAgeInYearsToday-1)
let ExactNoOfMonths_temp=EmpAgeInMonthToday<0?temp_year:EmpAgeInMonthToday
let ExactNoOfMonths=EmpAgeInMonthToday<0?EmpAgeInMonthToday+12&temp_year:EmpAgeInMonthToday
select new{emp.EmployeeID,DOB,
EmployeeAgeToday=EmpAgeInYearsToday+" Years "+ExactNoOfMonths+" Months ").Dump();

下面,

让ExactNoOfMonths = EmpAgeInMonthToday&lt; 0?EmpAgeInMonthToday + 12&amp; temp_year:EmpAgeInMonthToday

这部分不起作用。 &amp;和左侧的表达单独执行。我想执行这两项操作。如何实现这一目标?满足条件时如何执行多项操作?  有没有其他替代方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为你的意思是这样的:

ExactNoOfMonths = EmpAgeInMonthToday < 0 ?
                      EmpAgeInMonthToday + 12 :
                      temp_year ? 
                          EmpAgeInMonthToday :
                          somethingElse

但是somethingElseEmpAgeInMonthToday >= 0时应该有第三个值(temp_year = false)。

修改

你想要的实际上非常复杂。你最好只在内存中获取出生日期,然后用普通的C#进行计算。

This CodeProject link提供了一种可能的方法。正如您所看到的,您无法避免闰年和月份的长度:2月28日到3月28日之间的差异是正常年份1个月,闰年1个月和1天。