首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linq to sql批量删除

linq to sql批量删除
EN

Stack Overflow用户
提问于 2009-03-17 14:49:04
回答 4查看 1.7K关注 0票数 5

我有以下数据库:Posts,其中有一个IdTags也与Id,以及TagsToPosts表,其中有TagsToPosts.PostId => Posts.IdTagsToPosts.TagId => Tags.Id FK关系。我需要通过以下方式从TagsToPosts中删除多个项目。我通过解析一个字符串来创建IList<Tag> newTags。每个标记都有自己的名称。我想删除所有指向单个帖子(TagsToPosts.PostId == mypostid)的TagsToPosts项目,这些项目指向名称不在我的newTags中的Tag

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

我希望这在一个DB查询中发生,而不是迭代每个项目来删除它。

EN

回答 4

Stack Overflow用户

发布于 2009-10-09 06:21:58

使用LINQ-to-SQL不能做到这一点。

LINQ-to-SQL不适合批处理操作-它不能执行批插入、批更新和批删除。集合中的每个对象都是单独处理的。您可以在一个事务中执行所有操作,但始终会对每条记录进行查询。

MSDN

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

票数 3
EN

Stack Overflow用户

发布于 2009-03-17 15:37:25

你看过Linq Except运算符吗?

例如:

代码语言:javascript
复制
var toDelete = (from t in TagsToPost
                select t).Except(from nt in newList
                                 select nt, new TagComparer());

class TagComparer: IEqualityComparer<TagsToPosts>
{
    public bool Equals(TagsToPosts x, TagsToPosts y)
    {
         return x.Tag.Equals(y.Tag, CompareOptions.Ordinal);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2009-11-04 02:01:34

PLINQO支持批量删除操作,而无需首先检索实体。

var TagsToPost = from t in newList select t).Except(from nt in newList select nt,TagsToPost TagComparer())

Context.Tags.Delete(删除);

http://plinqo.com

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/654561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档