如何从表中删除元素
本文关键字:删除 元素 | 更新日期: 2023-09-27 17:57:12
请允许我解释一下我的情况。
我的数据库中有一个表,在我的模型中表示为
public Table<LinkDate> dates;
[Table(Name = "dates")]
public class LinkDate
{
public LinkDate()
{
}
[Column(IsPrimaryKey = true)]
public string linkguid { get; set; }
[Column]
public DateTime dtime { get; set; }
}
记录生成某些 ID 的日期/时间。这些 ID 与表中的一个或多个文件相关联,由
[Table( Name = "links")]
public class AssetLink
{
public AssetLink()
{
}
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int linkid { get; set; }
[Column]
public string linkguid { get; set; }
[Column]
public int fileid { get; set; }
}
我正在我的 Web 应用程序中添加一项功能,用户可以删除超过一定天数的所有链接。这意味着如果存在任何此类链接,我将从links
和dates
中删除行。
我已经开始创建的动作是
[HttpPost]
public ActionResult FlushLinks (string numDaysOld)
{
// Deletes all database references to links were submitted over numDaysOld days ago
DateTime currentDateTime = DateTime.Now;
foreach (LinkDate thisLinkDate in PD.dates)
{
TimeSpan thisTimeSpan = new TimeSpan(Convert.ToInt16(numDaysOld), 0, 0, 0);
if ((currentDateTime - thisLinkDate.dtime) > thisTimeSpan)
{
// ...
}
}
try
{
PD.SubmitChanges();
}
catch (Exception ex)
{
return Content(ex.Message, "text/html");
}
// if here, everything went well
return Content("Successfully removed all old links!", "text/html");
}
我需要帮助填写的是// ...
部分,因为我不知道如何,也看不到任何关于删除行的方法的文档。我想做的相当于
PD.links.Remove(x => x.linkguid == thisLinkDate.linkguid); // need something like this if possible
thisLinkDate.Remove() // and need something like this if possible
我需要做什么?
另外,请让我知道您在我的过程中看到的任何错误。
编辑:我想我自己想通了:
foreach (AssetLink thislink in PD.links) if (thislink.linkguid == thisLinkDate.linkguid) PD.links.DeleteOnSubmit(thislink);
PD.dates.DeleteOnSubmit(thisLinkDate);
如果这是错误的,请告诉我
尝试用这个替换你的 foreach 循环。
DateTime currentDateTime = DateTime.Now;
TimeSpan thisTimeSpan = new TimeSpan(Convert.ToInt16(numDaysOld), 0, 0, 0);
var delete_list = PD.dates.Where(x => (currentDateTime - x.dtime) > thisTimeSpan)
PD.dates.RemoveRange(delete_list);
请注意,您只需要从日期表中删除,这将导致 links 表中引用此日期的所有行的级联删除,假设为这些表正确配置了数据库的参照完整性检查。