У меня есть некоторые данные, которые представляют отношения родитель-потомок в одном и том же объекте. Учитывая узел, мне нужно найти всю его верхнюю иерархию (родительский, прародительский, прапрародительский и т. д.).
Моя сущность такая:
public partial class Location{
public int LocationId { get; set; }
public int? FkParentLocationId { get; set; }
..... more properties here.......
public virtual Location FkParentLocation { get; set; }
public virtual ICollection<Location> InverseFkParentLocation { get; set; }
}
Я имею в виду реализацию обхода иерархии, предложенную здесь, но она работает, когда вы идете вниз по иерархии. Как получить верхнюю иерархию с помощью LINQ?
Пример данных:
List<Location> locations = new List<Location> {
new Location { LocationId = 5, FkParentLocationId = 3, LocationName = "Windsor", LocationDisplayName = "Windsor"},
new Location { LocationId = 15, FkParentLocationId = 3, LocationName = "Hampshire", LocationDisplayName = "Hampshire" },
new Location { LocationId = 12, FkParentLocationId = 3, LocationName = "Sussex", LocationDisplayName = "Sussex"},
new Location { LocationId = 13, FkParentLocationId = 3, LocationName = "Willowood", LocationDisplayName = "Willowood"},
new Location { LocationId = 1, FkParentLocationId = 3, LocationName = "Gerbshire", LocationDisplayName = "Gerbshire"},
new Location { LocationId = 3, FkParentLocationId = 2, LocationName = "Lincoln", LocationDisplayName = "Lincoln"},
new Location { LocationId = 2, LocationName = "Mains", LocationDisplayName = "Mains" } };
Ожидаемый результат: учитывая идентификатор местоположения: 5, я должен получить список, содержащий местоположения 3 и 2 (поскольку они являются родителями).