我有一个需要按相当复杂的排序顺序按摩的对象列表。
我是 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)}
]
复杂的排序规则如下:按 originsFrom 分组,在每个组内按 lastChanged 降序排序,以及按(第一个实例的)lastChanged 升序排序的组。最后,那些在 originsFrom 中为 null 的应该填充到每个组的底部,以匹配它们在 originsFrom 中的 nr。(是的 - 它不会是开箱即用的东西:-/)
我试图通过将它们按 originsFrom 分组开始,但我真的需要将它们分开,以便我可以单独对它们进行排序(我认为?),我不确定使用 linq 是否明智,而不是去一次一个地遍历所有对象,建立几个列表并最终将它们连接起来?
好的部分是很少会有很多对象(所以效率可能不是那么大的问题)。在对将有多少组进行排序之前,我不会知道每个组中有多少对象。
如果我需要更好地解释排序规则,请告诉我!