我有以下数据库:
具有PostsId,还具有TagsId和具有TagsToPostsTagsToPosts.PostId => Posts.Id FK关系的TagsToPosts.TagId => Tags.Id表。
我需要通过以下方式从TagsToPosts中删除多个项目。
我正在通过解析字符串创建IList<Tag> newTags。每个标签都有其名称。我想删除所有指向单个帖子(TagsToPosts)且指向名称不在我的TagsToPosts.PostId == mypostid中的TagnewTags项。

例如,我有一个带有Id = 1的帖子,三个标签:1 => "tag1", 2 => "tag2", 3 => "tag3"和ManyToMany关系表TagsToPosts:1 => 1, 1 => 2, 1 => 3因此,所有三个标签都链接到我的帖子。
之后,我将通过解析一个字符串来创建一个新的IList<Tag> newList = new List<Tag>()newList包含:0 => "tag1", 0 => "tag2"
现在,我想从表TagToPosts中删除第三个关系,因为我的新标记列表不包含名称为“tag3”的标记。所以我需要找到一个区别。我知道我可以使用JOIN找到相似的项目,但是如何找到差异呢?

我希望在一个数据库查询中发生这种情况,而无需遍历每个项目以将其删除。

最佳答案

您无法使用LINQ-to-SQL做到这一点。

LINQ-to-SQL不适用于批处理操作-它不能进行批量插入,不能进行批量更新,也不能进行批量删除。集合中的每个对象都将单独处理。您可以在一个事务中完成所有操作,但是对于每条记录总会有一个查询。

MSDN

更好的选择是编写一个存储过程,该存储过程将执行您想要的操作。

关于linq to sql批处理删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/654561/

10-11 02:15