Nullを許容したDateTime型変数を検索条件として、Linqの.Where内で使いたかったためメソッド作りました。
公式でNullable.Compareというメソッドがあるのですが、返却値がInt型で使いづらかったのでBoolean型にしておきました。
メソッド
usingSystem;//date1がdate2より遅い日付の場合TruepublicboolCompareNullableDatetime(DateTime?date1,DateTime?date2){intresult=Nullable.Compare(date1,date2);returnresult>0;}仕様
DateTimeが非Nullの場合
| 返却値 | 引数1 | 引数2 | 補足 |
|---|---|---|---|
| TRUE | 2021/02/27 00:00:00 | 2021/01/27 00:00:00 | 引数1が引数2より遅い時刻 |
| FALSE | 2021/01/27 00:00:00 | 2021/02/27 00:00:00 | 引数1が引数2より早い時刻 |
| FALSE | 2021/02/27 00:00:00 | 2021/02/27 00:00:00 | 引数1と引数2が同じ時刻 |
DateTimeがNullを含む場合
| 返却値 | 引数1 | 引数2 |
|---|---|---|
| TRUE | 2021/02/27 00:00:00 | Null |
| FALSE | Null | 2021/02/27 00:00:00 |
| FALSE | Null | Null |
Nullable.Compareに関して補足
公式ドキュメント
Nullable.Compareの仕様
覚え方的には、Nullを「0」だと思って「引数1-引数2」をする感覚です。
DateTimeが非Nullの場合
| 返却値 | 引数1 | 引数2 | 補足 |
|---|---|---|---|
| 0より大きい値 | 2021/02/27 00:00:00 | 2021/01/27 00:00:00 | 引数1が引数2より遅い時刻 |
| 0より小さい値 | 2021/01/27 00:00:00 | 2021/02/27 00:00:00 | 引数1が引数2より早い時刻 |
| 0 | 2021/02/27 00:00:00 | 2021/02/27 00:00:00 | 引数1と引数2が同じ時刻 |
DateTimeがNullを含む場合
| 返却値 | 引数1 | 引数2 |
|---|---|---|
| 0より大きい値 | 2021/02/27 00:00:00 | Null |
| 0より小さい値 | Null | 2021/02/27 00:00:00 |
| 0 | Null | Null |
より大きい値、より小さい値ってなんやねん