gpt4 book ai didi

c# - 如何编写 LINQ to SQL 查询来更新标签?

转载 作者:行者123 更新时间:2023-11-30 18:41:16 35 4
gpt4 key购买 nike

我有一个图像网站,用户可以在其中标记照片,就像您可以在 Stackoverflow 上标记问题一样。

我有以下表格:

Images [ID, URL, etc]   
Tags [ID, TagName]
ImageTag [TagID, ImageID]

我想写一个带有签名的方法:

public void UpdateImageTags(int imageId, IEnumerable<string> currentTags)

此方法将执行以下操作:

  • 在标签表中尚不存在的 currentTags 中创建任何新标签。
  • 获取图像的旧 ImageTag。
    • 删除当前标签中不再存在的任何 ImageTag
    • 在 currentTags 和 oldTags 之间添加任何新的 ImageTag。

这是我对该方法的尝试:

public void UpdateImageTags(int imageId, IEnumerable<string> currentTags)
{
using (var db = new ImagesDataContext())
{
var oldTags = db.ImageTags.Where(it => it.ImageId == imageId).Select(it => it.Tag.TagName);
var added = currentTags.Except(oldTags);
var removed = oldTags.Except(currentTags);

// Add any new tags that need created
foreach (var tag in added)
{
if (!db.Tags.Any(t => t.TagName == tag))
{
db.Tags.InsertOnSubmit(new Tag { TagName = tag });
}
}
db.SubmitChanges();

// Delete any ImageTags that need deleted.
var deletedImageTags = db.ImageTags.Where(it => removed.Contains(it.Tag.TagName));
db.ImageTags.DeleteAllOnSubmit(deletedImageTags);

// Add any ImageTags that need added.
var addedImageTags = db.Tags.Where(t => added.Contains(t.TagName)).Select(t => new ImageTag { ImageId = imageId, TagId = t.TagId });
db.ImageTags.InsertAllOnSubmit(addedImageTags);
db.SubmitChanges();
}
}

然而,这行失败了:

db.ImageTags.DeleteAllOnSubmit(deletedImageTags);

出现错误:

Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.

在 LINQ to SQL 中,有没有一种更简单的方法可以处理添加新标签、删除旧 ImageTag、添加新 ImageTag 的操作?

最佳答案

这似乎是最简单的

public void UpdateImageTags(int imageId, IEnumerable<string> currentTags) 
{
using (var db = new ImagesDataContext())
{
var image = db.Images.Where(it => it.ImageId == imageId).First()
image.Tags.Clear();
foreach(string s in currentTags)
{
image.Tags.Add(new Tag() { TagName = s});
}
db.SubmitChanges();
}
}

对于 LinqtoSQL,这可能需要稍微修改。 EF 是我最近一直在使用的。这也取决于启用延迟加载。如果不是,您将不得不强制包含图像标签。

关于c# - 如何编写 LINQ to SQL 查询来更新标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7052318/

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