因此,由于答案不起作用,您正在向下滚动:
这就像魔术一样工作(但他们说大数据存在效率问题,而且您并不像我一样在乎)
1-在我的情况下,数据库中的数据类型为“ datetime”和“ nullable”。
DB中的示例数据格式如下:
2018-11-06 15:33:43.640
在C#中,当转换为字符串时,它类似于:
2019-01-03 4:45:16 PM
因此,格式为:
yyyy/MM/dd hh:mm:ss tt
2-因此,您需要首先以适当的格式准备datetime变量:
例子1
yourDate.ToString("yyyy/MM/dd hh:mm:ss tt")
示例2-最近30天的日期时间范围
DateTime dateStart = DateTime.Now.AddDays(-30);
DateTime dateEnd = DateTime.Now.AddDays(1).AddTicks(-1);
3-最后,您迷失了寻找时间的linq查询(需要EF 6)
using System.Data.Entity;
_dbContext.Shipments.Where(s => (DbFunctions.TruncateTime(s.Created_at.Value) >= dateStart && DbFunctions.TruncateTime(s.Created_at.Value) <= dateEnd)).Count();
同时考虑时间比较:
(DbFunctions.CreateDateTime(s.Created_at.Value.Year, s.Created_at.Value.Month, s.Created_at.Value.Day, s.Created_at.Value.Hour, s.Created_at.Value.Minute, s.Created_at.Value.Second) >= dateStart && DbFunctions.CreateDateTime(s.Created_at.Value.Year, s.Created_at.Value.Month, s.Created_at.Value.Day, s.Created_at.Value.Hour, s.Created_at.Value.Minute, s.Created_at.Value.Second) <= dateEnd)
请注意在其他stackoverflow问题和答案中提到的以下方法将无法正常工作:
....
&&
(
s.Created_at.Value.Day >= dateStart.Day && s.Created_at.Value.Day <= dateEnd.Day &&
s.Created_at.Value.Month >= dateStart.Month && s.Created_at.Value.Month <= dateEnd.Month &&
s.Created_at.Value.Year >= dateStart.Year && s.Created_at.Value.Year <= dateEnd.Year
)).count();
例如,如果开始日期在本月,而结束日期在下个月,则查询将返回false并且没有结果,例如:
DatabaseCreatedAtItemThatWeWant = 2018/12/05
startDate = 2018/12/01
截止日期= 2019/01/04
该查询将始终搜索01到04之间的天,而不考虑“月”,因此“ s.Created_at.Value.Day <= dateEnd.Day”将失败
并且如果您有非常大的数据,则可以执行本机SQL查询而不是linq
...
... where Shipments.Created_at BETWEEN CAST(@Created_at_from as datetime) AND CAST(@Created_at_to as datetime))
....
谢谢