따라서 답변이 작동하지 않기 때문에 아래로 스크롤합니다.
이것은 마술처럼 작동합니다 (하지만 그들은 빅 데이터에 대한 효율성 문제가 있다고 말하며 나처럼 신경 쓰지 않습니다)
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
EndDate = 2019/01/04
쿼리는 항상 "월"을 고려하지 않고 01과 04 사이의 일을 검색하므로 "s.Created_at.Value.Day <= dateEnd.Day"는 실패합니다.
그리고 정말로 큰 데이터가있는 경우 linq가 아닌 Native SQL Query를 실행합니다.
...
... where Shipments.Created_at BETWEEN CAST(@Created_at_from as datetime) AND CAST(@Created_at_to as datetime))
....
감사