基本上,我有一个小程序,我想在对象列表上执行一系列排序。每个排序都应该对对象的不同属性进行操作,并遵守前一个排序产生的排序。这是我到目前为止所拥有的:
class Program
{
static void Main(string[] args)
{
List<Person> people = new List<Person>();
people.Add(new Person { Name = "John", Age = 43 });
people.Add(new Person { Name = "Ringo", Age = 73 });
people.Add(new Person { Name = "John", Age = 32 });
people.Add(new Person { Name = "Paul", Age = 38 });
people.Add(new Person { Name = "George", Age = 16 });
people.Add(new Person { Name = "John", Age = 80 });
people.Add(new Person { Name = "Ringo", Age = 22 });
people.Add(new Person { Name = "Paul", Age = 64 });
people.Add(new Person { Name = "George", Age = 51 });
people.Add(new Person { Name = "George", Age = 27 });
people.Add(new Person { Name = "Ringo", Age = 5 });
people.Add(new Person { Name = "Paul", Age = 43 });
Print(Sort(people));
}
static IEnumerable<Person> Sort(IEnumerable<Person> people)
{
//order by name first, then order by age
return people.OrderBy(p => p.Name).OrderBy(p => p.Age);
}
static void Print(IEnumerable<Person> people)
{
foreach (Person p in people)
Console.WriteLine("{0} {1}", p.Name, p.Age);
}
class Person
{
public string Name {get; set;}
public int Age { get; set; }
}
}
这会产生以下输出:
林戈 5 乔治 16 林戈 22 乔治 27 约翰 32 保罗 38 约翰 43 保罗 43 乔治 51 保罗 64 林戈 73 约翰 80
但我希望它产生这个输出:
乔治 16 乔治 27 乔治 51 约翰 32 约翰 43 约翰 80 保罗 38 保罗 43 保罗 64 林戈 5 林戈 22 林戈 73
换句话说,我希望它按 排序Name
,然后Age
在每个Name
“组”中执行本地化排序。显然,Sort()
我到目前为止的方法并没有这样做,它只是执行两个链式OrderBy
's。
我能做到这一点的最好方法是什么IEnumerable
?理想情况下,我希望解决方案能够扩展和支持尽可能多的链式排序,每个排序都会产生一组“组”,下一个排序器必须将其排序本地化。