我想做的很简单。如果创建的事件的DateTimeOffSet
超过24小时,我希望将其从数据库中删除。使用转化System.Linq.IQueryable
到System.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也不喜欢这条线。如果您知道如何比较数据库中的时间与当前时间,请提供帮助。在这个网站上真的没有这样的问题。我花了一整天的时间在这个网站上,还没有找到一些东西。
谢谢
答案 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