Linq to Objects按任意数量的参数排序

fea*_*net 5 c# linq dynamic sql-order-by func

我有一个Func定义排序的列表:

var ordering = new List<Func<Person, IComparable>> 
                 { x => x.Surname, x => x.FirstName };
Run Code Online (Sandbox Code Playgroud)

我可以用......之类的东西来订购结果

people = people.OrderBy(ordering[0]).ThenBy(ordering[1]);
Run Code Online (Sandbox Code Playgroud)

当列表可以包含任意数量的连续排序时,我正试图计算如何执行上述操作.可能吗?

dtb*_*dtb 6

people = people.OrderBy(ordering[0]).ThenBy(ordering[1]).ThenBy(ordering[2]);
Run Code Online (Sandbox Code Playgroud)

是相同的

var orderedPeople = people.OrderBy(ordering[0]);
orderedPeople = orderedPeople.ThenBy(ordering[1]);
orderedPeople = orderedPeople.ThenBy(ordering[2]);
people = orderedPeople;
Run Code Online (Sandbox Code Playgroud)

所以你只需编写一个这样的循环:

if (ordering.Count != 0)
{
    var orderedPeople = people.OrderBy(ordering[0]);
    for (int i = 1; i < ordering.Count; i++)
    {
        orderedPeople = orderedPeople.ThenBy(ordering[i]);
    }
    people = orderedPeople;
}
Run Code Online (Sandbox Code Playgroud)