日付型を要素に持つリストを日付の早い順にソートしたいと思ったときに苦労しました。
日付はNULL許容だったため、LinqのOrderByでソートしてしまうとNULLが先頭に来てしまいます。
※NULL=無期限として扱いたかったため、最後にしたかった
NULLに対して9999/12/31を入れることも考えましたが、それでは根本的な解決にはならないので調べてみました。
boolのソートはfalse→trueの順に並ぶ
この情報を見て、日付でソートした後にnullかチェックした結果のboolでソートすれば期待する結果になるのではと思い試しました。
var sampleList = list.OrderBy(x => x.datetime).OrderBy(x => x.datetime == null);
「NULLじゃない=日付がある」なので、日付の昇順に並んだ後に「日付あり→なし」の順に並びます。
これでNULLを最後尾に持っていくことが出来ました。
コメント