У меня есть Category
Сущность, которая имеет коллекцию дочерних категорий и допускает нулевую ссылку на Parent Category
.
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public Category Parent { get; set; }
public ICollection<Category> Children { get; set; }
}
У меня есть сценарий, в котором мне нужно «скопировать» существующую сущность (Zone
), которая имеет ссылки на Categories
. В операторе select мне нужно отобразить существующие категории и их дочерние элементы в новую запись категории, чтобы при сохранении новых категорий содержалась ссылка на новую скопированную Zone
.
Проблема, с которой я столкнулся, - это метод рекурсии, который будет циклически проходить по текущей категории LINQ select (x
) и создавать новые записи категории для каждого из дочерних элементов и т. Д.
Вот соответствующая часть текущего оператора "копирования", который у меня есть. Должен ли я вызвать Where
на Categories
, которые являются верхним уровнем, то есть не имеют ParentId
, а затем использовать рекурсивный метод для детей?
Categories = zone.Categories.Where(y => !y.ParentId.HasValue).Select(x => new Category
{
Children = WHAT DO I PUT IN HERE
Name = x.Name,
}).ToList()