@DailyDDose

Рекурсивное удаление подзадач?

Есть такая вот модель
public class TaskModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public int ParentId { get; set; }
}


Как написать метод контроллера для удаления этой задачи и всех её подзадач?
[HttpDelete]
public ActionResult RemoveTask([FromBody] TaskModel taskData)
{
            // var tasksIds = GetChildrenIds(taskData.id);
            // Db::rawQuery($"DELETE FROM Tasks WHERE Id in {tasksIds}");
            // Db.SaveChanges();
 
            return Json(Db.Tasks);
}
private IEnumerable<int> GetChildrenIds(int parentId)
{
            return Db.Tasks
                .Where(task => task.Id == parentId)
                .Select(task => task.Id);
}
  • Вопрос задан
  • 98 просмотров
Решения вопроса 2
@igorsmi
Full stack web developer
Если это sql, то может просто использовать каскадное удаление!?
Ответ написан
Комментировать
@asd111
Зависит от БД. Гуглить Recursive CTE(Common Table Expressions).
В целом SQL выглядит примерно так
with recursive cte (id, name, parent_id) as
(
 select     id,
            name,
            parent_id
 from       products
 where      parent_id = 19
 union all
 select     p.id,
            p.name,
            p.parent_id
 from       products p
 inner join cte
         on p.parent_id = cte.id
)
select * from cte;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы