.NET实体框架如何选择最近1分钟更新的记录?

时间:2017-02-27 11:25:22

标签: c# sql .net entity-framework

我的应用程序的目的是根据标准检索记录。

问题是可能有数百万条记录,但我只想选择最近1分钟内更新过的记录。

我第一次选择所有记录但是一分钟之后我无法再次选择所有记录,因为这需要很长时间。我只想选择在该时间间隔内更新的订单。

var records = context.Orders.Where(x => x.Category == "GAMING");

我能做些什么吗?订阅某种数据库事件?

2 个答案:

答案 0 :(得分:1)

执行此操作的最有效方法是包含一个包含时间戳(ex.DateInserted)的日期时间列,并根据其值进行过滤:

var minuteAgo = DateTime.Now.AddMinutes(-1);
var recordsThisMinute =  context.Orders.Where(x => x.DateInserted >= minuteAgo && x.Category == "GAMING");

但是,如果您希望产生相同的结果,而不触及表格,则可以尝试以下方法:

//Assuming oldRecords is the variable in which
//you're storing the records you selected a minute ago
var recordsThisMinute = context.Orders.Where(x => x.Category == "GAMING").Except(oldRecords);

答案 1 :(得分:0)

也许你可以使用idOrder的静态字典,在DbContext中的日期时间,在SaveChanges方法的重载中管理。

public static IEnumarable<Order> GetLastUpdatedOrder()
{
//Return dictionnay here
}
public override int SaveChanges()
{
    var updatedOrder = ChangeTracker.Entries<Order>().Where(o => o.State == EntityState.Modified).ToList();
    //Manage here Your dictionnary
    var i = base.SaveChanges();
    return i;
}