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?」のオペランドには適用できません。および「bool」エラー。

どうすれば操作を実行できますか?

4

3 に答える 3

7

&& wt.Rqstcmpldt_dttm >= 2006

メッセージに明確に記載されているように、日付を数値と比較することはできません。

あなたが望むかもしれません.Year

于 2012-06-15T20:52:41.417 に答える
3

dueDate.Year - 3年だけの整数を返します。整数をDateTimeと比較することはできません。次のようなことをする必要があります。

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 に答える