지정된 유형 멤버 'Date'는 LINQ to Entities에서 지원되지 않습니다. 이니셜 라이저, 엔터티 멤버 및 엔터티 탐색 속성 만
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} = {"The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."}
그것을 고치는 방법에 대한 아이디어가 있습니까?
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();
EF6 사용시 다음 코드를 사용하십시오.
(DbFunctions.TruncateTime(x.User.LeaveDate.Value)
다른 해결책은 다음과 같습니다.
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference).AsEnumerable()
.Where(x => x.DateTimeStart.Date == currentDate.Date).AsQueryable();
'IT박스' 카테고리의 다른 글
SQL 문자열에서 앰퍼샌드 문자 이스케이프 (0) | 2020.07.09 |
---|---|
Express.js 중첩 라우터로 휴식 (0) | 2020.07.09 |
Java를 사용하여 이미지 크기를 조정하는 방법 (0) | 2020.07.09 |
iOS-보기를 통해 모든 터치 전달 (0) | 2020.07.08 |
Node.js에서 비 차단 또는 비동기 I / O 란 무엇입니까? (0) | 2020.07.08 |