Linq的DateDiff替代品

时间:2013-01-22 19:19:00

标签: c# .net linq

如果有记录的日期介于两个字段之间,我试图获得结果:开始和结束。我所遇到的linq查询似乎没有返回任何结果:

var alerts = from q in db.AlertMsgs 
             where (q.Start >= DateTime.Now
             && q.Finish <= DateTime.Now)
             select q;

对此为何有任何建议?我也试过了

var alerts = from q in AlertMsgs.Where(q => q.Start.CompareTo(DateTime.Now) > 0
&& q.Finish.CompareTo(DateTime.Now) < 1)
 select q;

没有任何运气。

1 个答案:

答案 0 :(得分:2)

你的条件倒退了。尝试:

var alerts = from q in db.AlertMsgs 
             where (q.Start < DateTime.Now && q.Finish > DateTime.Now) 
             select q;

或者,使用方法语法(以及<= / >=,以防您需要进行比较):

var alerts = db.AlertMsgs
               .Where(q => q.Start <= DateTime.Now && q.Finish >= DateTime.Now);

这将为您提供已经开始(Start < Now)但尚未完成(Finish > Now)的所有消息。你要搜索的是尚未开始的消息(或者现在正好),但已经完成(或者现在完成 )。这只会返回一个具有相同开始和结束时间的项目,并且两个时间都恰好是DateTime.Now