Try something like this:
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);
}
}