2012-05-02 5 views
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; } 
} 

выше объект является рекурсивным в том смысле, что он всегда может иметь свои собственные ребенок, даже если в данном примере это только два слоя глубоко. Я не знаю, как структурировать результат на 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) предметов, включая детей, и должен быть в основном отсортированным, если это поможет.

ответ

0

Вы хотите использовать выражение общей таблицы (CTE для краткости). С их помощью вы можете получить рекурсивные запросы. Хороший пример имеет ответ на this question.

+0

Это выглядит интересно, но я изо всех сил пытаюсь применить его к моему сценарию. Кажется, что это только очень простые примеры, и я не вижу того, что делает TSQL. Результаты запроса отмеченного ответа находятся в том же порядке, что и добавлены в таблицу. –

Смежные вопросы