Nullを許容したDateTime型変数を検索条件として、Linqの.Where内で使いたかったためメソッド作りました。
公式でNullable.Compareというメソッドがあるのですが、返却値がInt型で使いづらかったのでBoolean型にしておきました。
メソッド
using System;
//date1がdate2より遅い日付の場合True
public bool CompareNullableDatetime(DateTime? date1, DateTime? date2)
{
int result = Nullable.Compare(date1, date2);
return result > 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 |
より大きい値、より小さい値ってなんやねん