В моем приложении ниже классы, которые содержат иерархические данные, как показано ниже:
Class A
{
string Id{get;set;}
string Name{get;set;}
string Order{get;set;}
string ParentId{get;set;}
}
Class B
{
string Id{get;set;}
string Name{get;set;}
string Order{get;set;}
string ClassAId{get;set;}
}
Class C
{
string Id{get;set;}
string Name{get;set;}
string Order{get;set;}
string ClassBId{get;set;}
}
Пример данных для класса A будет
Id = "1.1" Id = "2.1"
Name = "SomeName" Name = "Name2"
Order = 1 Order = 1
ParentId = "1" ParentId = 2
Id = "1.2" Id = "2.2"
Name = "Name2" Name = "Name3"
Order = 2 Order = 2
ParentId = "1" ParentId = 2
Пример данных для класса B будет
Id = "1.1.1" Id = "2.1.1"
Name = "SomeName" Name = "Name2"
Order = 1 Order = 1
ParentId = "1.1" ParentId = 2.1
Id = "1.2.1" Id = "2.1.2"
Name = "Name2" Name = "Name3"
Order = 2 Order = 2
ParentId = "1.2" ParentId = 2.1
Аналогично для класса C данные будут выглядеть как
Id = "1.1.1.1" Id = "2.1.1.1"
Name = "SomeName" Name = "Name2"
Order = 1 Order = 1
ParentId = "1.1.1" ParentId = 2.1.1
Теперь, если пользователь хочет обновить значение между существующими значениями, то, как оно должно работать, предположим, что я ввожу значение от 1,2 до 1,3 для класса A, он должен сначала создать новое значение с именем 1,4, а затем переместить все содержимое 1.3 и его потомков до 1.4 (т. е. если у 1.3 есть свои дочерние элементы, такие как 1.3.1 и т. д., 1.3.1.1 и т. д., то все должны быть переименованы в 1.4.1 и 1.4.1.1 соответственно, а в 1.3 не должно быть любая иерархия с пустым значением. В основном между вставками следует обновить полную иерархию записи. Я могу правильно генерировать следующую последовательность, находя текущий Id и находя максимальный порядок и добавляя к нему 1. Проблема, с которой я сталкиваюсь, находится между вставками и обновление всей иерархии.
Любые идеи помогут. Ниже приведен код, который я написал для ввода нового значения. Класс A:
// Находим максимальный ордер, увеличиваем его на 1 и вставляем новую запись.
var currentClass = listOfClassA.Where(x => x.Id = currentId).SingleOrDefault();
var maxOrder = listOfClassA.Max(x => x.Order);
var objClassA = new A();
objClassA.Order = maxOrder + 1;
objClassA.ParentId = currentClassA.ParentId;
objClassA.Name = "";
objClassA.Id = currentClassA.ParentId + "." + objClassA.Order;