2020/08/06(Thu) 21:57:59 編集(投稿者)
2020/08/06(Thu) 21:57:54 編集(投稿者)
<pre><pre>お世話になっております。
Linqを使用したソートについてご助力いただけないでしょうか。
以下が実現したい内容、現在の状況になります。
■ソート条件
・第一ソートキー:年齢の昇順
・第二ソートキー:住所の昇順
※値が空白のものは、後ろに表示する
■ソート元データ
| 名前 | 年齢 | 住所 |
|あおやま| 10 | |
|こすぎ | | |
|たなか | 15 |ナガノ |
|さとう | |ナゴヤ |
|やまもと| 10 |ナハ |
■理想
| 名前 | 年齢 | 住所 |
|やまもと| 10 |ナハ |
|あおやま| 10 | |
|たなか | 15 |ナガノ |
|さとう | |ナゴヤ |
|こすぎ | | |
■ソース
var result = humans.OrderBy(i => i.Age).ThenBy(i => i.Address).ToList();
// 空の値が後ろにいくようソートする
result = result.OrderBy(i => string.IsNullOrWhiteSpace(i.Age)).ThenBy(i => string.IsNullOrWhiteSpace(i.Address)).ToList();
■実行結果
この場合にソートした結果として、以下のようになってしまいます。
| 名前 | 年齢 | 住所 |
|やまもと| 10 |ナハ |
|たなか | 15 |ナガノ |
|あおやま| 10 | |
|さとう | |ナゴヤ |
|こすぎ | | |
■質問
Linqを使用して、理想の形に持っていくのは難しいでしょうか?
拡張メソッドでソートしなければ実現できないでしょうか?</pre></pre>