C # сортировка объектов по группам с использованием linq - PullRequest
2 голосов
/ 29 августа 2011

У меня есть список объектов, которые сгруппированы по определенному свойству. Мне нужно отсортировать этот список на основе других свойств, но он всегда должен сохранять группировку. Так, например, если список выглядит примерно так:

{ 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 (), но я не могу получить то, что мне нужно.

Ответы [ 2 ]

5 голосов
/ 29 августа 2011
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);
0 голосов
/ 29 августа 2011

Ваш тестовый образец до / после не совпадает, но это должно решить вашу проблему.

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