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