从同一个表中对对象进行递归排序

时间:2012-05-02 03:53:57

标签: c# sql-server-2008 sorting collections

我的数据如下表所示(为了简单起见,我排除了任何与排序顺序无关的值)。

ID     POSITION     PARENT     HASCHILDREN
------------------------------------------
1         1           0            False
2         3           0            True
3         2           0            False
4         1           2            False
5         2           2            False

我想要做的是按位置递归对数据进行递归排序。我拥有的对象就像这样

public class ExampleObject
{
    public int ID { get; set; }
    public int Position { get; set; }
    public int Parent { get; set; }
    public bool HasChildren { get; set; }
    public List<ExampleObject> Children { get; set; }
}

上面的对象是递归的,因为它总是有自己的子节点,即使在这个例子中它只有2层深。我不知道如何在SO上构建结果,但这里是我希望结果的JSON

    [
        {
            ID: 1,
            Position: 1,
            Parent: 0,
            HasChildren: false,
            Children: []
        },
        {
            ID: 3,
            Position: 2,
            Parent: 0,
            HasChildren: false,
            Children: []
        },
        {
            ID: 2,
            Position: 3,
            Parent: 0,
            HasChildren: true,
            Children: [
                {                        
                    ID: 4,
                    Position: 1,
                    Parent: 2,
                    HasChildren: false,
                    Children: []
                },
                {                        
                    ID: 5,
                    Position: 2,
                    Parent: 2,
                    HasChildren: false,
                    Children: []
                }
            ]
        }
    ]

我真的不知道从哪里开始,我知道的是列表不会很大(10-20)项目,包括儿童和 应该大部分排序,如果这有帮助。

1 个答案:

答案 0 :(得分:0)

您需要使用公用表表达式(简称CTE)。有了这些,您可以获得递归查询。 this question的答案有一个很好的例子。