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 に答える