Я пытаюсь построить дерево XML некоторых данных с родительским отношением дочерних элементов, но в той же таблице.
Двумя важными областями являются
CompetitionID ParentCompetitionID
Некоторые данные могут быть
CompetitionID = 1, ParentCompetitionID = нуль
CompetitionID = 2, ParentCompetitionID = 1
CompetitionID = 3, ParentCompetitionID = 1
Сломанный запрос, который я просто показываю, отображает результаты в плоском формате. Видя, что я работаю с XML, требуется какая-то рекурсивная функциональность. Я могу сделать это, используя обычную для рекурсии цикла, но хотел бы увидеть версию linq. Любая помощь была оценена.
var results =
from c1 in comps
select new {
c.CompetitionID,
SubComps=
from sc in comps.Where (c2 => c2.CompetitionID == c1.CompetitionID)
select sc
};
Update
Я нашел интересную статью Chris Eargle здесь, в которой показано, как рекурсивно вызывать лямбда-делегатов. Вот код. Спасибо Крису!
Func<int, int> factoral = x => x <= 1 ? 1 : x + factoral(--x);
Func<int, int> factoral = null;
factoral = x => x <= 1 ? 1 : x + factoral(--x);
^ добавлено форматирование кода, чтобы показать функции lamba Хитрость заключается в том, чтобы сначала присвоить делегату Func нуль.