@Taifunov

Как рекурсивно получить всех родителей у потомка?

Есть все локации вида (допустим 100 штук, это локации для TreeView):
Id, Name, ParentId
1 Root Null
2 Semi-root 1
3 Semi-semi-root 2

И есть данные в которых мы получили лишь те локации которые соответствуют нашим значениям из другого запроса:
Id, Name, ParentId
22 Location1 12
36 Location38 21

Нужно из этих двух выборок сделать 1 объект в виде
public class TreeViewNode {
  public Guid Id {get; set;}
  public string Name {get; set;}
  public Guid ParentId {get; set;}
}


var locations = new List(); - и здесь конкретно наша выборка из второго запроса в которых мы получили конкретные локации и их родители которых мы вытащили по парент айди в выборке всех локаций.

Подскажите как получить данные значения?
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
@KislyFan
инженер, связист и просто любитель выпить
Рекурсивно. Я так понимаю у тебя список TreeViewNode's соответственно чтобы найти всех родителей, тебе нужна функция которая будет принимать один экземпляр TreeViewNode, и отдавать список или массив Guid или TreeViewNode (зависит от ситуации).

что-то вроде этого псевдокода
public List<TreeViewNode> nodes = ...; 
public List<Guid> GetAllParentsId(Guid Id)
{
        List<Guid> response = new List<Guid>();
        TreeViewNode current = nodes.FirstOrDefault(n => n.Id == Id);
        if(current is null)
        {
                return response;
        }
        //response.Add(current);
        var mynodes = GetAllParentsId(current.Id);
        if(mynodes.Count == 0)
        {
                return response;
        }
        response.AddRange(mynodes);
        return response;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman Куратор тега C#
C# the best
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы