如何根据列表中的其他属性对列表进行排序

时间:2019-05-09 19:17:51

标签: c# linq dapper

我想根据类层次结构的形成顺序对列表进行排序。

例如。

[ParentNode, ChildNode]
[A, B] //1st
[B, Y] 
[Y, Z] //last

我不能按字符排序,我需要按父子关系排序。

[ParentNode, ChildNode]
[NULL,      IDS]
[EFL,       PEFL001]
[IDS,       EFL]
[PCMN010,   PCMN014]
[PEFL001,   PCMN010]
[PEFL001,   PCMN010]

在上面的示例中,您可以看到一些示例数据,该示例数据类似于当前查询的返回值。

Row(1)的父节点为NULL,因此可以将其标记为“起点”。问题是Row(2)(ChildNode)!= Row(3)(ParentNode)。遇到重复项时,它必须足够聪明以将它们堆叠在一起(没有特定顺序)

在下面您可以看到预期的结果。请注意,row(n).ChildNode = row(n + 1).ParentNode,但在堆栈时有重复项除外。 我需要能够在LINQ或SQL中做到这一点

[ParentNode, ChildNode]
[NULL,      IDS]
[IDS,       EFL]
[EFL,       PEFL001]
[PEFL001,   PCMN010]
[PEFL001,   PCMN010]
[PCMN010,   PCMN014]

1 个答案:

答案 0 :(得分:0)

您应该可以使用df <- data.frame( " " = c("Average age of Diagnosis", "Average Life Space", "Average Number of Dogs Diagnosised with MR"), "2008-2018" = c(28, 27, 30), "Sample size" = c(12,23,34), stringsAsFactors = FALSE, check.names=FALSE) "",并且都具有用于类型安全的泛型。 IComparable IComparer

基本思想是您需要能够与该类型的另一个进行比较。比较器将返回-1、0或1,具体取决于哪个是第一个。您可以查看子对象,并在比较中做出确定。