linq 在C#中,是否可以轻松地从某个范围中获取数据?

o2gm4chl  于 2022-12-06  发布在  C#
关注(0)|答案(1)|浏览(149)

我的业务提供了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对于实体不能识别日期。

nx7onnlm

nx7onnlm1#

正如一些人对您的问题所做的评论,解决此问题最简单、最常用的方法是选择一个“独占”结束日期,而不是"包含“结束日期。
第一个

相关问题