Entity Framework 에서이 코드를 사용 하면 다음 오류가 발생합니다. 특정 날짜의 모든 행을 DateTimeStart
가져와야합니다.이 형식의 DataType 유형입니다.2013-01-30 12:00:00.000
암호:
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => x.DateTimeStart.Date == currentDateTime.Date);
오류:
base {System.SystemException} = { “지정된 유형 멤버 ‘Date’는 LINQ to Entities에서 지원되지 않습니다. 이니셜 라이저, 엔티티 멤버 및 엔티티 탐색 특성 만 지원됩니다.”}
그것을 고치는 방법에 대한 아이디어가 있습니까?
답변
DateTime.Date
SQL로 변환 할 수 없습니다. 날짜 부분을 가져 오려면 EntityFunctions.TruncateTime 메소드를 사용하십시오 .
var eventsCustom = eventCustomRepository
.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => EntityFunctions.TruncateTime(x.DateTimeStart) == currentDate.Date);
업데이트 : 주석에서 언급 한 @ shankbond는 Entity Framework 6 EntityFunctions
에서 사용되지 않으므로 Entity Framework DbFunctions
와 함께 제공되는 클래스 를 사용해야합니다 .
답변
이제 사용해야합니다 DbFunctions.TruncateTime
var anyCalls = _db.CallLogs.Where(r => DbFunctions.TruncateTime(r.DateTime) == callDateTime.Date).ToList();
답변
엔티티 프레임 워크 에서이 문제를 해결하는 데 도움이되는 솔루션을 추가하고 싶습니다.
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => x.DateTimeStart.Year == currentDateTime.Year &&
x.DateTimeStart.Month== currentDateTime.Month &&
x.DateTimeStart.Day == currentDateTime.Day
);
도움이 되길 바랍니다.
답변
EntityFunctions
더 이상 사용되지 않습니다. DbFunctions
대신 사용하십시오 .
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => DbFunctions.TruncateTime(x.DateTimeStart) == currentDate.Date);
답변
x.DateTimeStart와 currentDate 모두에 대해 항상 EntityFunctions.TruncateTime ()을 사용하십시오. 같은 :
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference).Where(x => EntityFunctions.TruncateTime(x.DateTimeStart) == EntityFunctions.TruncateTime(currentDate));
답변
간단한 속성 만 사용하십시오.
var tomorrow = currentDateTime.Date + 1;
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => x.DateTimeStart >= currentDateTime.Date
and x.DateTimeStart < tomorrow);
앱에서 미래 날짜를 사용할 수 없으면 > = x.DateTimeStart> = currentDateTime.Date 이면 충분합니다.
더 복잡한 날짜 비교
가있는 경우 정식 함수 를 확인 하고 EF6 + DB 함수 가 있는지 확인하십시오.
보다 일반적으로-문제를 검색하는 사람들을 위해 EF에서 지원되는 Linq 메소드는
메모리 기반 목록에서는 작동하지만 EF에서는 작동하지 않는 linq 문과 유사한 문제를 설명 할 수 있습니다.
답변
쉽게 한:
DateTime time = System.DateTime.Now;
ModelName m = context.TableName.Where(x=> DbFunctions.TruncateTime(x.Date) == time.Date)).FirstOrDefault();
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)