gpt4 book ai didi

c# - 在 MySQL 和 Entity Framework 中删除评论及其所有子项的 SQL 查询

转载 作者:行者123 更新时间:2023-11-28 23:18:51 24 4
gpt4 key购买 nike

我有一个评论表。

  • 编号
  • section_id
  • parent_comment_id
  • root_id
  • 内容

它支持多级评论。

如果评论在最上面的位置,它的root_idNULL并且它的parent_comment_idNULL .

如果评论在另一个评论之下:parent_comment_id 等于评论的评论 ID,它只是在它下面的一层。所有子评论的 root_id 将是最上面评论的 ID,该评论位于其下方。

例子:

[id=1] [parent_comment_id=null] [root_id=null]
[id=2] [parent_comment_id=1] [root_id=1]
[id=3] [parent_comment_id=1] [root_id=1]
[id=4] [parent_comment_id=3] [root_id=1]
[id=5] [parent_comment_id=4] [root_id=1]
[id=12] [parent_comment_id=3] [root_id=1]
[id=6] [parent_comment_id=1] [root_id=1]

[id=2] [parent_comment_id=null] [root_id=null]

我无法控制数据库架构。所以我无法做出改变。表中也没有为任何这些列设置外键约束。

我遇到的问题是创建一个函数,可能是一个递归函数,它获取评论 ID 并删除该评论及其所有子项,所有级别的子项。这可以是树中任何位置的注释。

这是我现在正在尝试的东西:

 protected void DeleteChildComments(comment c)
{
// get all comments with c.id as its parent_id
List<comment> oneLevelDownSubComments = new List<comment>();

using (phEntities db = new phEntities())
{
oneLevelDownSubComments = db.comments.Where(x => x.parent_comment_id == c.id).ToList<comment>();

}

if (oneLevelDownSubComments.Count == 0)
{
// no children, just delete the comment
using (phEntities db = new (phEntities())
{
db.comments.Remove(c);
db.SaveChanges();
}
}
else
{
// has children
foreach(var item in oneLevelDownSubComments)
{
DeleteChildComments(item);
}
}

}

我正在针对 MySQL 5 数据库使用 ASP.NET 4.5 C# 和 Entity Framework 进行开发。

最佳答案

好的,我终于成功了,这是代码:

  protected void DeleteChildComments(comment c, phEntities db) {
if (c != null) {
// get all comments with c.id as its parent_id
List <comment> oneLevelDownSubComments = new List <comment> ();

oneLevelDownSubComments =
db.comments.Where(x => x.parent_comment_id == c.id).ToList <comment> ();

if (oneLevelDownSubComments.Count == 0) {
// no children, just delete the comment

db.comments.Remove(c);
db.SaveChanges();
} else {
// has children, delete them
foreach(var item in oneLevelDownSubComments) {
DeleteChildComments(item, db);
}

// delete itself if has no children
DeleteChildComments(c, db);
}
}
}

关于c# - 在 MySQL 和 Entity Framework 中删除评论及其所有子项的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42647613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com