2

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

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

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

4

2 回答 2

5
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);
于 2011-08-29T17:19:39.420 回答
0

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

 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;
于 2011-08-29T17:32:33.440 回答