我正在尝试执行以下操作:
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?'类型的操作数和'bool'“错误。
我该如何进行操作?
答案 0 :(得分:7)
&& wt.Rqstcmpldt_dttm >= 2006
如信息明确指出,您无法将日期与数字进行比较。
您可能需要.Year
。
答案 1 :(得分:3)
dueDate.Year - 3
返回一年中的整数。您无法将整数与DateTime进行比较。你需要做这样的事情:
where wt.Rqstcmpldt_dttm >= dueDate.AddYears(-3)
答案 2 :(得分: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)
添加括号,如下例所示。