如何使用Linq对以下人员列表进行排序,以便按ID对他们进行分组,并保证保持他们的添加顺序。
List<person>people = new List<person>();
people.Add(new Person(1, "joe"));
people.Add(new Person(1, "john"));
people.Add(new Person(2, "bob"));
people.Add(new Person(3, "tracy"));
people.Add(new Person(2, "harry"));
people.Add(new Person(1, "ellen"));
people.Add(new Person(3, "mary"));我想要的结果:
Person(1, "joe")
Person(1, "john")
Person(1, "ellen")
Person(2, "bob")
Person(2, "harry")
Person(3, "tracy")
Person(3, "mary")发布于 2012-03-04 14:54:48
var result = people.Select((person,index)=>new{person,index})
.OrderBy(pair => pair.person.ID)
.ThenBy(pair => pair.index)
.Select(pair => pair.person)
.ToArray();发布于 2012-03-04 15:12:29
这就足够了:
var orderedPeople = people.OrderBy(p => p.Id).ToList();Enumerable.OrderBy执行稳定的排序:
此方法执行稳定的排序;即,如果两个元素的键相等,则保留元素的顺序。
List<T>是guarantee that items will be returned in the order they were added。所以你会得到你想要的结果:
Person(1, "joe")
Person(1, "john")
Person(1, "ellen")
Person(2, "bob")
Person(2, "harry")
Person(3, "tracy")
Person(3, "mary")发布于 2012-03-04 15:09:20
您可以通过以下方式使用LINQ对此列表进行排序.....
var orderedList = from p in people
orderby p.Id ascending
select p;https://stackoverflow.com/questions/9552909
复制相似问题