Ali Majed HA Ответов: 1

Как удалить дочерние узлы при удалении родительского узла


Привет
У меня есть дерево :

Идентификатор Звание Атрибутом ParentId
1 А 0
2 Б 1
3 С 2
4 D 3

Как я могу удалить всех детей при удалении "а" с помощью Entity framework и jqxTree?

Что я уже пробовал:

TableTree _TT = _Entity.TableTree.where(c => c.Id == _RemoveArgs.Id).singleorDifault();
if(_TT != null)
{
   _Entity.TableTree.Remove(_TT);
}

TableTree _TT2 = _Entity.TableTree.where(c => c.ParentId == _RemoveArgs.Id).singleorDifault();
if(_TT2 != null)
{
   _Entity.TableTree.Remove(_TT2);
}


_RemoveArgs-класс, который я передаю JSON-данных в JavaScript-файл к нему.

Заранее спасибо

1 Ответов

Рейтинг:
10

Richard Deeming

Попробуйте что-нибудь вроде этого:

TableTree node = _Entity.TableTree.SingleOrDefault(c => c.Id == _RemoveArgs.Id);
if (node != null)
{
    var nodesToRemove = new List<TableTree>();
    nodesToRemove.Add(node);
    
    var children = _Entity.TableTree.Where(c => c.ParentId == node.Id).ToList();
    if (children.Count != 0)
    {
        var tree = new Queue<IList<TableTree>>();
        tree.Enqueue(children);
        
        while (tree.Count != 0)
        {
            IList<TableTree> current = tree.Dequeue();
            nodesToRemove.AddRange(current);
            
            foreach (TableTree child in current)
            {
                children = _Entity.TableTree.Where(c => c.ParentId == child.Id).ToList();
                if (children.Count != 0)
                {
                    tree.Enqueue(children);
                }
            }
        }
    }
    
    foreach (TableTree nodeToRemove in nodesToRemove)
    {
        _Entity.TableTree.Remove(nodeToRemove);
    }
}


Ali Majed HA

Заранее спасибо за вашу помощь