首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用Linq维护列表顺序的同时进行排序和分组

如何在使用Linq维护列表顺序的同时进行排序和分组
EN

Stack Overflow用户
提问于 2012-03-04 14:37:34
回答 3查看 534关注 0票数 0

如何使用Linq对以下人员列表进行排序,以便按ID对他们进行分组,并保证保持他们的添加顺序。

代码语言:javascript
运行
复制
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"));

我想要的结果:

代码语言:javascript
运行
复制
Person(1, "joe")
Person(1, "john")
Person(1, "ellen")
Person(2, "bob")
Person(2, "harry")
Person(3, "tracy")
Person(3, "mary")
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-04 14:54:48

代码语言:javascript
运行
复制
    var result = people.Select((person,index)=>new{person,index})
      .OrderBy(pair => pair.person.ID)
      .ThenBy(pair => pair.index)
      .Select(pair => pair.person)
      .ToArray();
票数 1
EN

Stack Overflow用户

发布于 2012-03-04 15:12:29

这就足够了:

代码语言:javascript
运行
复制
var orderedPeople = people.OrderBy(p => p.Id).ToList();

Enumerable.OrderBy执行稳定的排序:

此方法执行稳定的排序;即,如果两个元素的键相等,则保留元素的顺序。

List<T>guarantee that items will be returned in the order they were added。所以你会得到你想要的结果:

代码语言:javascript
运行
复制
Person(1, "joe")
Person(1, "john")
Person(1, "ellen")
Person(2, "bob")
Person(2, "harry")
Person(3, "tracy")
Person(3, "mary")
票数 2
EN

Stack Overflow用户

发布于 2012-03-04 15:09:20

您可以通过以下方式使用LINQ对此列表进行排序.....

代码语言:javascript
运行
复制
var orderedList = from p in people
                   orderby p.Id ascending
                   select p;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9552909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档