Linq中的DateDiff选项

本文关键字:选项 DateDiff 中的 Linq | 更新日期: 2023-09-27 17:55:06

我试图得到结果,如果有记录的日期落在两个字段之间:开始和结束。我的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;

Linq中的DateDiff选项

你把条件弄反了。试一试:

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