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 |
より大きい値、より小さい値ってなんやねん