Linq如果DateTime字段早于X小时

Gra*_*avy 5 c# linq linq-to-entities

我尝试了以下(显然没有//),但我无法工作,有人可以帮忙吗?

    public void CleanBasket()
    {
        //double validHours = 3;
        // var expired = (from a in db.Baskets where (DateTime.Now - a.DateCreated).TotalHours > validHours  select a);
        //var expired = (from a in db.Baskets where (DateTime.Now.Subtract(a.DateCreated).Hours > 3) select a);
        //var expired = (from a in db.Baskets where(a => a.DateCreated > DateTime.Now.AddHours(-1));
        //foreach (Basket basket in expired) db.DeleteObject(expired);
        db.SaveChanges();
    }
Run Code Online (Sandbox Code Playgroud)

Ian*_*cer 15

在这种情况下,您可以在调用LINQ之前简单地进行日期时间计算:

double validHours = 3;
var latest = DateTime.UtcNow.AddHours(-validHours);
var expired = (from a in db.Baskets where a.DateCreated < latest select a);
Run Code Online (Sandbox Code Playgroud)

对于您需要在数据库中执行的任何更复杂的DateTime操作,并且不能以这种方式执行,您可以使用SqlFunctions.

顺便说一下,你应该把你的时间存储在Utc而不是当地时间.DateTime.Now在夏令时变化期间使用的计算将是错误的.