Я написал код для получения иерархических данных о местоположении.Я могу получить иерархию только до ДВУХ уровней, но то, что я ищу иерархию n-го уровня.Я также написал рекурсивную функцию, но не смог добавить данные в иерархию.
Класс модели данных: -
public class RoomDTO
{
public Guid RoomId { get; set; }
public string Name { get; set; }
public Guid? ParentRoomId { get; set; }
public List<RoomDTO> Children { get; set; } = new List<RoomDTO>();
}
Родительская функция: -
private List<RoomDTO> RoomData(List<SubLocation> subLocations)
{
List<RoomDTO> rooms = new List<RoomDTO>();
foreach (var location in subLocations.Where(x => x.HasChildLocations))
{
var subLocationDTO = new RoomDTO
{
RoomId = location.SubLocationId
,Children = getChild(subLocations, location, new RoomDTO()).Children
};
rooms.Add(subLocationDTO);
}
return rooms;
}
Рекурсивная функция: -
private RoomDTO getChild(List<SubLocation> list, SubLocation location, RoomDTO roomDTO)
{
var child = list.Where(x => x.ParentSubLocationId == location.SubLocationId).ToList();
for (int i = 0; i < child.Count; i++)
{
var childRoom = new RoomDTO {
ParentRoomId = child[i].ParentSubLocationId
, RoomId = child[i].SubLocationId
};
roomDTO.Children.Add(childRoom);
getChild(list, child[i], roomDTO);
}
return locList;
}
Функция вызова: -
public void GetRoomList()
{
var subLocationList = _context.SubLocations.AsNoTracking().ToList();
var data = RoomData(subLocationList);
}
Пожалуйста, сообщите, что неверноЯ здесь делаю.