У меня есть список объектов, которые мне нужно преобразовать в довольно сложный порядок сортировки.
Я - новичок в linq и c # /. Net (но не в программировании на других языках), поэтому я хотел бы получить несколько советов, в каком направлении мне нужно идти.
Мой список (упрощенный) выглядит так:
List[
{nr: 1, originatesFrom: null, lastChanged: DateTime(2018,5,3)},
{nr: 2, originatesFrom: null, lastChanged: DateTime(2018,5,3)},
{nr: 3, originatesFrom: null, lastChanged: DateTime(2018,5,3)},
{nr: 4, originatesFrom: 1, lastChanged: DateTime(2018,5,1)},
{nr: 5, originatesFrom: 2, lastChanged: DateTime(2018,5,1)},
{nr: 6, originatesFrom: 1, lastChanged: DateTime(2018,5,7)},
{nr: 7, originatesFrom: 1, lastChanged: DateTime(2018,5,4)},
{nr: 8, originatesFrom: 3, lastChanged: DateTime(2018,5,13)},
{nr: 9, originatesFrom: 1, lastChanged: DateTime(2018,5,13)},
{nr: 10, originatesFrom: 3, lastChanged: DateTime(2018,5,10)},
{nr: 11, originatesFrom: 3, lastChanged: DateTime(2018,5,18)}
]
и мне нужно помассировать его примерно так:
List[
{nr: 5, originatesFrom: 2, lastChanged: DateTime(2018,5,1)},
{nr: 2, originatesFrom: null, lastChanged: DateTime(2018,5,3)},
{nr: 9, originatesFrom: 1, lastChanged: DateTime(2018,5,13)},
{nr: 6, originatesFrom: 1 lastChanged: DateTime(2018,5,7)},
{nr: 7, originatesFrom: 1, lastChanged: DateTime(2018,5,4)},
{nr: 4, originatesFrom: 1, lastChanged: DateTime(2018,5,1)},
{nr: 1, originatesFrom: null, lastChanged: DateTime(2018,5,3)},
{nr: 11, originatesFrom: 3, lastChanged: DateTime(2018,5,18)},
{nr: 8, originatesFrom: 3, lastChanged: DateTime(2018,5,13)},
{nr: 10, originatesFrom: 3, lastChanged: DateTime(2018,5,10)},
{nr: 3, originatesFrom: null, lastChanged: DateTime(2018,5,3)}
]
Сложные правила сортировки: Сгруппированы по originatesFrom, внутри каждой группы, отсортированной по убыванию lastChanged, и по группам, отсортированным по возрастанию lastChanged (первого экземпляра). Наконец, те, которые имеют значение null в originatesFrom, должны быть вставлены в конец каждой группы, совпадая с их номером в originatesFrom. (да - это не будет что-то, что выходит из коробки здесь: - /)
Я пытался начать с группировки их по originatesFrom, но мне действительно нужно, чтобы они были разделены на две части, чтобы я мог отсортировать их по отдельности (я думаю?), И я не уверен, что было бы разумно использовать linq вообще, вместо того, чтобы проходить все объекты по одному, создавать несколько списков и в итоге объединять их в конце?
Хорошей частью является то, что редко будет действительно много объектов (поэтому эффективность может быть не такой уж большой проблемой). До сортировки я не буду знать, сколько будет групп и сколько объектов будет в каждой группе.
Если мне нужно лучше объяснить правила сортировки, пожалуйста, дайте мне знать!