あんみんどうふです。
LINQで普通にOrderByすると昇順でソートされますが、場合によっては0以下の数字を後ろにソートしたい時もあります。
1,2,3,4ときて-1が来るのも違和感があるので、できれば0以下は降順にしたい。
1 2 3 4 5 | using System.Linq; List<int> list = new List<int>() { 1, 3, 2, 0, 4, -1 }; list.OrderBy(r => r).ToList(); // [-1, 0, 1, 2, 3, 4] NG |
解決策
OrderByで0未満を指定、1つ目のThenByで0を指定、2つ目のThenByで通常のソートをすると0以下を後ろにしつつ降順でソートできます。
最初のOrderBy時点で0以下としてソートすると0以下は後ろになるものの負の値が昇順になってしまうので、ソートを分けて行う必要があります。
1 2 3 4 5 6 7 | List<int> list = new List<int>() { 1, 3, 2, 0, 4, -1 }; list.OrderBy(r => r <= 0).ThenBy(r => r).ToList(); // [1, 2, 3, 4, -1, 0] NG list.OrderBy(r => r < 0).ThenBy(r => r == 0).ThenBy(r => r).ToList(); // [1, 2, 3, 4, 0, -1] OK |