我的业务提供了2个日期范围:“我们想要7月和6个月前的所有数据”。我创建两个日期:
_range1.MaxDateTime = new DateTime(today. Year, 7, 31);
_range1.MinDateTime = rangeLastDate.AddMonths(-6).AddDays(1);
因为系统总是在过去6个月执行计算。最后一天也总是月末。我可以得到一个月的最后一天。C#有EndOfMonth()
功能。但是当我这样做的时候,我总是得到午夜的最后一天。当我自己创建DateTime()
的时候,我也得到午夜的日期。
在我的代码中,我使用实体框架与LinQ。(旧的EF,还没有核心)
_range1_ShippedQuantities = DbContext.Job_Dtl
.Where(j=> j.LastShipDate >= _range1.MinDateTime && j.LastShipDate <= _range1.MaxDateTime)
这是不正确的,因为我的最后一个日期时间是31日午夜,而不是下个月1日午夜。我应该
_range1_ShippedQuantities = DbContext.Job_Dtl
.Where(j=> j.LastShipDate.Date >= _range1.MinDateTime.Date && j.LastShipDate.Date <= _range1.MaxDateTime.Date)
或者我也可以操纵日期,强制时间为23:59:59...我不喜欢的是。我仍然错过了1秒。我可以添加999毫秒,但我仍然会告诉你我错过了1毫秒。我也可以在一个临时变量中添加一天,并在我的LinQ查询中使用这个临时变量...是的,但我感觉有更好的东西。你如何处理这些范围?
但是LinQ不允许这样做。LinQ对于实体不能识别日期。
1条答案
按热度按时间nx7onnlm1#
正如一些人对您的问题所做的评论,解决此问题最简单、最常用的方法是选择一个“独占”结束日期,而不是"包含“结束日期。
第一个