C#:运营商'> ='不能应用于类型' System.DateTime?'的操作数?和' int'

时间:2012-06-15 20:51:26

标签: c#

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

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'“错误。

我该如何进行操作?

3 个答案:

答案 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)

添加括号,如下例所示。