0

我正在尝试执行以下操作:

where wt.Rqstcmpldt_dttm >= dueDate.Year - 3 && wt.Rqstcmpldt_dttm >= 2006 
    && wt.Rqstcmpldt_dttm < timeframe

并得到上述错误信息。然后我尝试了这个:

where (wt.Rqstcmpldt_dttm ?? new DateTime(3000,1,1).Year >= dueDate.Year - 3) 
    && (wt.Rqstcmpldt_dttm ??  new DateTime(3000,1,1).Year >= 2006) 
    && (wt.Rqstcmpldt_dttm ??  new DateTime(3000,1,1).Year < timeframe)

但我得到一个“操作员”??不能应用于“System.DateTime?”类型的操作数?和“布尔””错误。

我该如何执行这些操作?

4

3 回答 3

7

&& wt.Rqstcmpldt_dttm >= 2006

正如消息中明确指出的,您不能将日期与数字进行比较。

你可能想要.Year.

于 2012-06-15T20:52:41.417 回答
3

dueDate.Year - 3返回年份的整数。您不能将整数与日期时间进行比较。你需要做这样的事情:

where wt.Rqstcmpldt_dttm >= dueDate.AddYears(-3)
于 2012-06-15T20:54:13.663 回答
1

运算符比运算>=符绑定得更紧密??。这意味着您正在隐式进行此比较:

where (wt.Rqstcmpldt_dttm ?? (new DateTime(3000,1,1).Year >= dueDate.Year - 3)) 
   && (wt.Rqstcmpldt_dttm ?? (new DateTime(3000,1,1).Year >= 2006)) 
   && (wt.Rqstcmpldt_dttm ?? (new DateTime(3000,1,1).Year < timeframe))

其中左侧??是 DateTime,右侧是布尔值(通过比较返回);这与您现在收到的错误消息相匹配。

你实际上想要这种行为:

where ((wt.Rqstcmpldt_dttm ?? new DateTime(3000,1,1).Year) >= dueDate.Year - 3) 
   && ((wt.Rqstcmpldt_dttm ?? new DateTime(3000,1,1).Year) >= 2006) 
   && ((wt.Rqstcmpldt_dttm ?? new DateTime(3000,1,1).Year) < timeframe)

像下面的例子一样添加括号。

于 2012-06-15T20:54:11.023 回答