var onLineP = (from od in db.RTLS_ONLINEPERSONSTATUS
where (lsdAts <= od.created_time && od.created_time <= DateTime.Now)
select od).ToList();
在上面的查询中,我得到的是前几天的记录,但不是当天的记录。我使用Entity框架作为我的orm和azure-sql作为后端。 RTLS_ONLINEPERSONSTATUS表分别有两个记录 创建时间分别为4/17/2017 10:00:09 AM,4/18/2017 10:00:09 。我正在记录 创建的时间值= 4/17/2017 10:00:09 AM 并且未获得 当天(4/18 / 2017上午10:00:09) 记录。 lsdAts(服务器上的最后同步日期)= {4/6/2017 10:34:09 AM}。
答案 0 :(得分:0)
最后我得到了解决问题的方法。隐藏的问题是我的sql服务器位于南 - Acia,我从南印度访问它,所以时区不匹配,因为Linq在运行时将Datetime.Now转换为SysDateTime()。为了解决这个问题,我在Datetime.Now中添加了330分钟(即5小时30分钟),如下面的代码片段所示。
var onLineP = (from od in db.RTLS_ONLINEPERSONSTATUS
where (lsdAts <= od.created_time && od.created_time <= DbFunctions.AddMinutes(DateTime.Now, 330))
select od).ToList();
答案 1 :(得分:0)
正如我所提到的,它与时区差异有关。我建议仅在比较时间时使用UTC。它还意味着还要将数据库中的时间保留在UTC中。最终代码看起来应该是这样的:
var onLineP = (from od in db.RTLS_ONLINEPERSONSTATUS
where (lsdAts <= od.created_time_utc && od.created_time_utc <= DateTime.Now.ToUniversalTime())
select od).ToList();