如何从表中删除元素

本文关键字:删除 元素 | 更新日期: 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 应用程序中添加一项功能,用户可以删除超过一定天数的所有链接。这意味着如果存在任何此类链接,我将从linksdates中删除行。

我已经开始创建的动作是

    [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 表中引用此日期的所有行的级联删除,假设为这些表正确配置了数据库的参照完整性检查。