在大约12/1/2014 9:40:12 PM,以下代码检索空值。
Campaign camp = repo.Campaigns
.Where(ca => ca.StartTime <= DateTime.Now)
.Where(ca => ca.EndTime >= DateTime.Now)
.FirstOrDefault();
当数据库中有一个包含以下值的广告系列时:
Start Time:
2014-11-30 00:00:00.000
End Time:
2014-12-02 00:00:00.000
我完全失去了为什么会这样。
答案 0 :(得分:0)
试试这个:
Campaign camp = repo.Campaigns
.Where(ca => ca.StartTime.Value.Date <= DateTime.Now.Date && ca.EndTime.Value.Date >=DateTime.Now.Date).FirstOrDefault();
答案 1 :(得分:0)
您是否考虑过时区信息?数据库中存储的数据可能是从另一个时区运行的计算机创建的,您的DateTime对象将有另一个时区,当它们传递给数据库时,它们可能会超过EndTime。
您的代码在处理内存数据时有效,因此问题可能与时区有关。
评论其他内容: 1.不要链接多个。当你可以用一个子句时。 2.不要使用DateTime.Now,将DateTime.Now存储在一个值中,然后将其传递给LINQ,否则您将根据两个不同的值合并StartTime和EndTime。
var now = DateTime.Now;
Campaign camp = repo.Campaigns
.Where(ca => ca.StartTime <= now && ca.EndTime >= now)
.FirstOrDefault();
答案 2 :(得分:0)
您首先选择的DateTime小于当前值。假设你有2个结果。接下来对于这两个结果,您要查询的DateTime大于当前值!结果小于当前日期,因此显然它们永远不会超过当前的日期值。我想你正在努力做到以下几点:
Campaign camp = repo.Campaigns
.Where(ca => ca.StartTime.Value.Date <= DateTime.Now.Date **||** ca.EndTime.Value.Date >=DateTime.Now.Date).FirstOrDefault();
答案 3 :(得分:-1)
这种情况正在发生,因为您比较 StartTime 和 EndTime 的时间与文化 DateTime的日期格式不同。现在正在接受
**
DateTime.Now- 12/1/2014 9:40:12 PM
Start Time: 2014-11-30 00:00:00.000
End Time: 2014-12-02 00:00:00.000
**
将您的Datetime.Now日期格式更改为相同格式,因为 StartTime 和 EndTime 是 即 2014-12-01 9:40:12 PM
然后比较我相信你会得到结果