如何创建Action以删除Asp.Net Mvc项目中超过两周的记录

时间:2017-11-20 19:14:26

标签: asp.net asp.net-mvc

我有一张名为" Loggs"如图所示。

enter image description here

我想创建删除超过两周的所有记录的操作。例如今天是2017-11-20,LoggId 1,2和3有旧的Loggdate。如何创建删除它们? 我试图将那些LoggId放在Array中,我在Array中尝试了旧日期,但后来我不知道该怎么办....

这是旧日期数组

public DateTime[] OldDates()
{
  var oldDate = DateTime.Now.AddDays(-14);

 return  context.Loggs.Where(u => u.LoggDate < oldDate).Select(d => d.LoggDate).ToArray();

} 

并尝试过Id

public int[] OldDateId()
{
  var oldDate = DateTime.Now.AddDays(-14);
  return  context.Loggs.Where(u => u.LoggDate < oldDate).Select(d => d.LoggId).ToArray();

}

但是如何创建删除操作....? 我试过这样但是我不知道如何完成它

public ActionResult DeleteOldLogs()
{
  var datesToRemove = OldDates();
  using (context)
  {
    context.Loggs.Remove(.....) // I don't know how to formulate here ..;)
  }
}

提前谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用接受实体集合的RemoveRange方法。

此外,您的操作方法需要返回一些内容。

public ActionResult DeleteOldLogs()
{
    var oldDate = DateTime.Now.AddDays(-14);
    var oldItems = context.Loggs.Where(u => u.LoggDate < oldDate);
    context.Loggs.RemoveRange(oldItems);
    context.SaveChanges();

    return Content("Deleted successfully");
}

当执行此代码时,EF将发出一个SELECT查询以获取旧记录并执行NDELETE个查询,其中N是返回的数字记录来自第一个SELECT查询。

另一个选择是为oldItems集合中的每个项目调用Remove

var oldItems = context.Loggs.Where(u => u.LoggDate < oldDate);
foreach (var oldItem in oldItems)
{
    context.Loggs.Remove(oldItem);
}
context.SaveChanges();

请记住,您正在调用当前时间戳的AddDays方法。因此,如果您的表列具有时间戳(DateTime),它将删除该时间戳之后的记录(不是从上午12点

答案 1 :(得分:2)

public ActionResult DeleteOldLogs()
{
  var datesToRemove = OldDates();
  using (context)
  { 
    foreach (var item in datesToRemove)
    {
        context.Loggs.Remove(item);
        context.SaveChanges();
    }
  }
}

答案 2 :(得分:1)

我认为Loggs是一个表,你问的是如何使用Entity来删除某些内容?

var oldDate = DateTime.Now.AddDays(-14);
var dates = context.Loggs.Where(l => l.LoggDate < oldDate);
context.Loggs.RemoveRange(dates);
context.SaveChanges();