0

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

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)个项目,包括孩子,如果有帮助的话,应该大部分排序。

4

1 回答 1

0

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

于 2012-05-02T03:58:38.493 回答