【问题标题】:Recursive sorting of objects from the same table对同一张表中的对象进行递归排序
【发布时间】:2012-05-02 03:53:56
【问题描述】:

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

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)个项目,包括孩子,如果有帮助,应该主要进行排序。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这看起来很有趣,但我很难将它应用到我的场景中。似乎这些只是非常基本的示例,我没有看到 TSQL 实际在做什么。标记答案的查询结果与将它们添加到表中的顺序相同。
    猜你喜欢
    • 2015-12-30
    • 2014-09-05
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多