首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#对象按组排序,使用linq

C#对象按组排序,使用linq
EN

Stack Overflow用户
提问于 2011-08-30 01:16:28
回答 2查看 2.9K关注 0票数 2

我有一个按特定属性分组的对象列表。我需要根据其他属性对此列表进行排序,但它始终需要保留分组。因此,例如,如果列表类似于:

代码语言:javascript
复制
{ id=1, partNumber = 100 }
{ id=2, partNumber = 500 }
{ id=2, partNumber = 300 }
{ id=2, partNumber = 600 }
{ id=3, partNumber = 550 }
{ id=3, partNumber = 990 }
{ id=4, partNumber = 200 }
{ id=5, partNumber = 300 }

则按零件号升序排序后的结果为:

代码语言:javascript
复制
{ id=1, partNumber = 100 }
{ id=4, partNumber = 200 }
{ id=5, partNumber = 300 }
{ id=2, partNumber = 400 }
{ id=2, partNumber = 500 }
{ id=2, partNumber = 600 }
{ id=3, partNumber = 550 }
{ id=3, partNumber = 990 }

它按每个组中的最小PartNumber排序(如果是降序排序,则按最大值排序),但必须保持按ID分组。我尝试了.OrderBy()和.GroupBy()的各种组合,但似乎无法获得所需的内容。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-30 01:19:39

代码语言:javascript
复制
var orderedList = 
    list.GroupBy(i => i.id)
        .OrderBy(g => g.Min(i => i.partNumber))
        // and if you want to flatten the groupings back out
        .SelectMany(g => g);
票数 5
EN

Stack Overflow用户

发布于 2011-08-30 01:32:33

您之前/之后的测试样本不匹配,但这应该可以解决您的问题。

代码语言:javascript
复制
 var query = from a in list
             orderby a.partNumber
             group a by a.id into ag
             orderby ag.Min(x => x.partNumber)
             from a in ag
             select a;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7233436

复制
相关文章

相似问题

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