将DateTimeOffSet从DataBase与当前值进行比较

时间:2015-10-30 21:05:17

标签: c# linq datetimeoffset

我想做的很简单。如果创建的事件的DateTimeOffSet超过24小时,我希望将其从数据库中删除。使用转化System.Linq.IQueryableSystem.DateTime时,我付出了巨大的代价。

任何帮助将不胜感激。 这是事件索引

public ActionResult Index()
{
    IQueryable<DateTimeOffset> b = db.Events.Select(x => x.EventTime);
    DateTimeOffset currentDate = DateTimeOffset.Now;
    if (currentDate > b)
    {
        db.Events.Remove(@event);
        db.SaveChanges();
        return View(db.Events.ToList());
    }

    return View(db.Events.ToList());
}

我的另一个问题是我如何构建它以便它需要24小时的差异才能从数据库中删除行。

数据表将EventTime作为DateTimeOffset数据类型。

我也一直在尝试使用

DateTimeOffset.Compare(currentDate, b);

但Visual Studio也不喜欢这条线。如果您知道如何比较数据库中的时间与当前时间,请提供帮助。在这个网站上真的没有这样的问题。我花了一整天的时间在这个网站上,还没有找到一些东西。

谢谢

2 个答案:

答案 0 :(得分:1)

在查询中进行比较可能更容易:

public ActionResult Index()
{
    DateTimeOffset currentDate = DateTimeOffset.Now.AddDays(-1);
    IQueryable<Event> events = db.Events.Where(x => currentDate > x.EventTime);

    foreach(var e in events){ 
    {
        db.Events.Remove(e);
    }
    db.SaveChanges()

    return View(db.Events.ToList());
}

然后你可以循环并删除每一个。我也会在循环外保存更改,以便我们提交一次而不是多次更改。

答案 1 :(得分:0)

You could do something like this

foreach (var a in b)
{
     if( (currentDate - a).Hours >= 24 ) 
    {
        ...
    }
}

See the example here: https://msdn.microsoft.com/en-us/library/bb352700(v=vs.110).aspx

currentDate - b would return a TimeSpan object, and you could use the Hours property on it to do the check.

See all TimeSpan members here: https://msdn.microsoft.com/en-us/library/system.timespan_members(v=vs.90).aspx