Получить неизвестное количество родителей, используя LINQ to SQL - PullRequest
1 голос
/ 29 апреля 2011

Учитывая следующее:

public class Person
{
  public int  PersonId { get; set; }
  public int? ParentId { get; set; }
}

Предположим, у меня есть следующая древовидная структура (PersonID - ParentID):

1 - null
  2 - 1
    3 - 2
  4 - 1

Как мне получить всех родителей PersonId 3 или 2,1 с помощью запроса LINQ to SQL?

Примечание: A null ParentId обозначает лицо верхнего уровня

1 Ответ

2 голосов
/ 29 апреля 2011

Вам понадобится цикл (или другая форма рекурсии).

var personId = 3 as int?;
var result = new List<Person>();
do
{
    var person = context.Persons.Single(p => p.PersonId == personId.Value);
    result.Add(person);
    personId = person.ParentId;
} while (personId != null);
// all ancestors are in `result`
...