日付型を要素に持つリストを日付の早い順にソートしたいと思ったときに苦労しました。
 日付は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を最後尾に持っていくことが出来ました。
 
 

コメント