web-dev-qa-db-ja.com

LINQを使用したOrderByのカスタムソートロジック

文字列のリストを並べ替えるには、アンダースコア「_」で始まるアイテムをリストの一番下に並べるのに適切な方法は何ですか。それ以外の場合はすべてアルファベット順です。

今私はこのようなことをしています

autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a )
49
Bala R

カスタムの順序付けが必要で、比較演算子を提供したくない場合は、それを使用できます-SQLスタイル:

autoList
.OrderBy(a => a.StartsWith("_") ? 2 : 1 )
.ThenBy(a => a);
95
Amy B

OrderBy(Func<>, IComparer<>) を使用して、カスタムロジックを実装する独自の Comparer を指定する必要があると思います。

6
abatishchev

IComparerを受け取るOrderByのオーバーロードを使用します。最初のFunc引数が比較演算子に供給され、そこから文字列を比較する必要があります。最初に一方または両方が_で始まる場合に対処し、次にそこから_を取り除き、標準のstring.Compareを使用して最初の_を超えて並べ替える必要があります。

2
Matt Greer