我想创建删除超过两周的所有记录的操作。例如今天是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 ..;)
}
}
提前谢谢!
答案 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
查询以获取旧记录并执行N
个DELETE
个查询,其中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();