Использование : SQL Server 2008, WCF 4 REST, EF
У меня есть таблица списка смежностей, представляющая дерево
TABLE Category
(
CatId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ParentId int NULL,
Name nvarchar(50) NOT NULL
)
Я создаю WCF RESTAPI, позволяющий клиенту строить дерево в режиме ленивой загрузки.Выполнить запрос, чтобы получить дочерние элементы узла (nodeid ниже), просто.Я сталкиваюсь с необходимостью определить, какие узлы являются листовыми узлами.( Примечание : я удалил всю обработку ошибок, обработку count = 0, обработку нуля и т. Д. Из приведенного ниже кода)
tree = _context.Categories
.Where(c => c.ParentId == nodeid)
.Select(p => new TreeNode
{
id = p.CatId,
parentId = p.ParentId ?? -1, // -1 = NULL in data struct
name = p.Name,
isleaf = true // how to figure this out?
}).ToList();
Есть идеи?Я в порядке, собираюсь в сохраненный процесс для этого запроса и подумал об использовании CTE, но я не хочу проходить через все дерево - просто получить дочерние элементы указанного узла.
РЕДАКТИРОВАТЬ (20 января, 10:40 утра) Я решил изменить схему БД, добавив битовый столбец «IsLeaf».Затем я сделал обновление, чтобы настроить IsLeaf соответственно - это означает, что мне не нужно динамически выяснять это во время выполнения.Возможно, более эффективный, но мне все еще интересно, как бы я поступил по этому поводу.Пожалуйста, сообщите.