如何比较linq中的可变变量?

时间:2013-02-14 03:44:34

标签: c# linq

我尝试通过linq选择一些数据,但系统显示我的错误

  

'System.DateTime'类型的表达式不能用于方法'Boolean Equals(System.Object)'的'System.Object'类型的参数

我的WorkingResults.EffectiveDate是DateTime?但是我的日期变量是DateTime。如何更改代码以解决此问题?

  WorkingResult workingResultObj = (from workingResult in this.DataWorkspace.ApplicationData.WorkingResults
where workingResult.EmployeeCode == employeeCode  && workingResult.EffectiveDate.Equals(date)                                         
select workingResult).FirstOrDefault();

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

嗯,有几个解决方法。首先,你可以把它变成DateTime:

workingResult.EffectiveDate.GetValueOrDefault(DateTime.MinValue).Equals(date)

我不知道有效日期是什么。或者,您可以使用Object.Equals:

Object.Equals(workingResult.EffectiveDate, date)

这可能无法给您预期的结果。如果你总是知道生效日期有一个值,那么你可以使用@spajce方法。

答案 1 :(得分:2)

您可以使用.HasValue,并且必须使用

...
where workingResult.EmployeeCode == employeeCode && 
(workingResult.EffectiveDate.HasValue && 
 workingResult.EffectiveDate.Value.Date == date.Date).FirstOrDefault();

答案 2 :(得分:0)

 WorkingResult workingResultObj = 
  (
      from workingResult 
      in this.DataWorkspace.ApplicationData.WorkingResults
      where 
            workingResult.EffectiveDate.HasValue
            && workingResult.EmployeeCode == employeeCode  
            && workingResult.EffectiveDate.Value == date                                         
      select workingResult
  ).FirstOrDefault();