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 に答える