Упорядочить связанную структуру списка в запросе SQL или LINQ? - PullRequest
5 голосов
/ 07 декабря 2010

У меня есть база данных, которая по сути выглядит так:

id uniqueidentifier NOT NULL
data nvarchar
nextid uniqueidentifier NULL

Это связанный список, поскольку каждый nextid ссылается на идентификатор в этой таблице, за исключением последнего, здесь nextid имеет значение NULL. Я знаю идентификатор первого узла.

Я хочу ВЫБРАТЬ их все в правильном порядке, учитывая начальный идентификатор.

Есть ли способ сделать это в T-SQL (Правка: SQL 2008) или LINQ?

Я знаю, что могу написать код для этого вручную в C #, просто интересно, могу ли я уже запрашивать в таком порядке?

Ответы [ 2 ]

5 голосов
/ 07 декабря 2010

Не уверен, что [SortOrder] имеет какое-либо значение, поскольку у меня недостаточно данных для его проверки. Это позволяет сортировать в обоих направлениях.

with cteList as
(
    select id, data, nextid, 1 as [SortOrder]
    from #TableTemp
    where id = 'E8ADAA52-54F8-4FE3-BE59-9852E52B33F5' --id of the 1st item

    union all

    select #TableTemp.id, #TableTemp.data, #TableTemp.nextid, (cteList.[SortOrder] + 1) as [SortOrder]
    from #TableTemp
    join cteList on #TableTemp.id = cteList.nextid
)
select * from cteList
order by [SortOrder] asc
3 голосов
/ 07 декабря 2010

Какая версия SQL Server? Если это 2005 или новее, вы можете использовать рекурсивный CTE, сделайте это.

with linked_list as (
  select
    id, data, nextid
  from
    table
  where
    id = @head
  union all
  select
    t.id, t.data, t.nextid
  from
    table t
    join linked_list ll on t.id = ll.nextid
)
select
  *
from
  linked_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...