4

ユーザーが並べ替え基準を指定できる C# プログラムを作成しています。たとえば、ユーザーは「serviceName」のみで並べ替えたり、「isHD」や「isGood」などの他の条件を追加したりできます。私が尋ねるのは、「.Then By」ステートメントを使用したいのですが、ユーザーはそれを何回書く必要があるかを決定します。

スイッチ/ケース ブロックに応じて、基準の数を柔軟に設定する方法はありますか? 例えば

List.OrderBy(t => t.name)
List.OrderBy(t => t.isHD).ThenBy(t => t.name)
List.OrderBy(t => t.isGood).ThenBy(t => t.name).ThenBy(t => t.isHD)

また、これらの基準の順序はユーザーが選択します。

4

2 に答える 2

6

一般的な方法を使用できます:

    public List<T> SortBy<T>(List<T> list, params Func<T, object>[] selectors)
    {
        var ordered = list.OrderBy(selectors[0]);
        for (int i = 1; i < selectors.Count(); i++)
        {
            ordered= ordered.ThenBy(selectors[i]);
        }
        return ordered.ToList();
    }

それを実行します:

SortBy(List, x=>x.name, x=>x.isHD, x=>x.isGood)

これは次のことを行います:

List.OrderBy(x=>x.name).ThenBy(x=>x.isHD).ThenBy(x=>x.isGood)

セレクターが渡されたかどうかを確認することで改善できます

于 2013-09-04T13:32:00.197 に答える
2

OrderBy最初の並べ替え順序 (つまり) を適用した結果を型の変数に代入してから、必要な回数だけ同じ変数に代入するループをIOrderedEnumerable呼び出すことができます。ThenBy

于 2013-09-04T13:33:47.140 に答える