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

C#对象按组排序,使用linq,c#,linq,group-by,sql-order-by,linq-query-syntax,C#,Linq,Group By,Sql Order By,Linq Query Syntax,我有一个按特定属性分组的对象列表。我需要根据其他属性对该列表进行排序,但它始终需要保留分组。例如,如果列表如下所示: { 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=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 }
按零件号升序排序后的结果为:

{ 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 }

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

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

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);
 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;

你在什么时候对结果进行分组?您是在数据库级别进行分组,比如通过存储过程进行分组,还是也通过LINQ进行分组?我可能缺少一个SelectMany来在以后取消分组SelectMany。非常感谢。首先添加一个.OrderBy(i=>i.partNumber),这将在测试样本成为任意列表之前提供所需的输出。我很确定after样本在按ID分组、按零件号排序方面是匹配的。你是什么意思?@溺水-在你的第一个集合中,你的id=3,partNumber=900,这不在你的有序集合中,但你的id=3,partNumber=550ah,一个拼写错误,好的。我还以为你是说这类错误。明白了,谢谢。