我有以下DB:
Posts它有一个Id,Tags也有Id,和TagsToPosts有TagsToPosts.PostId => Posts.Id和TagsToPosts.TagId => Tags.IdFK关系的表.我需要以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".现在我想从表TagsToPosts中删除第三个关系,因为我的新标签列表不包含名为"tag3"的标签.所以我需要找到一个区别.我知道我可以使用JOIN找到类似的项目,但如何找到差异?
我想在一个数据库查询中发生这种情况而不迭代每个项目以删除它.
您看过 Linq except 运算符吗?
例如:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1669 次 |
| 最近记录: |