请允许我解释一下我的情况。
我的模型中有一个表格在我的模型中由
表示 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; }
}
我在我的网络应用程序中添加了一项功能,用户可以删除超过特定天数的所有链接。这意味着如果存在任何此类链接,我将删除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");
}
以及我需要填写的内容是// ...
部分,因为我不知道如何删除和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);
如果错了,请告诉我
答案 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)
请注意,您只需要从日期表中删除,这将导致链接表中引用此日期的所有行的级联删除,假设已为这些日期正确配置了数据库的参照完整性检查表。