如何从表中删除元素?

时间:2015-06-18 20:16:27

标签: c# asp.net asp.net-mvc algorithm linq

请允许我解释一下我的情况。

我的模型中有一个表格在我的模型中由

表示
   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; }

}

我在我的网络应用程序中添加了一项功能,用户可以删除超过特定天数的所有链接。这意味着如果存在任何此类链接,我将删除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");
    }

以及我需要填写的内容是// ...部分,因为我不知道如何删除和can't see any documentation about a way to删除行。我试图做的是等同于

 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); 

如果错了,请告诉我

2 个答案:

答案 0 :(得分:0)

尝试用此替换你的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);

答案 1 :(得分:0)

请注意,您只需要从日期表中删除,这将导致链接表中引用此日期的所有行的级联删除,假设已为这些日期正确配置了数据库的参照完整性检查表。