탐색 속성이 Settings
이고 읽기 전용 속성이 IsVisibleInApp
인 User
클래스가 있습니다.Entity Framework 핵심 LINQ 클래스 속성/메서드를 사용할 수 없습니다. 포함 된 속성
var users = context.Users.Include(x => x.Settings)
.Where(x => x.Settings.IsApproved && x.Settings.IsAvailable && x.UserType == 2);
하지만 자주 이러한 검사를 사용하는, 그래서 내가 속성을 사용하려고하며 런타임에 널 (null)로 Settings
을 가져옵니다
현재이 코드는 작동합니다.
여기 내 코드입니다.
public bool IsVisibleInApp
{
get
{
return this.Settings.IsApproved && this.Settings.IsAvailable && this.UserType == 2;
}
}
...
...
void SomeMethod(){
var users = context.Users.Include(x => x.Settings)
.Where(x => x.IsVisibleInApp).ToList();
외래 키 this.SettingsID
은 유효한 값입니다. 나는 에서 Where
절에 속성/메소드를 사용할 수 없으므로 SQL로 변환 될 것입니다. 하지만 확실하게 여기 주위에 방법이 있습니다 ... 아니면 .ToList()
을 먼저 수행 한 다음 추가 .Where
호출을 사용해야합니다. 그러나 이것은 많은 추가 작업처럼 보이는 데이터베이스에서 모든 행을 가져 오는 것을 의미합니다. .
나는 당신이 당신의 자신의 질문에 대답 생각합니다. 왜 데이터베이스가 C# 코드를 강조 표시합니까? LINQ가 C# 코드를 임의로 SQL로 변환하려고 시도하는 이유는 무엇입니까? 원래의 람다를 번역 할 수 있지만 속성의 getter는 변환 할 수 없습니다. 그게 효과가 있다면, 그 다음에 getter의 다른 데이터베이스에 서비스 호출이나 I/O를 포함시키면서 DB 서버에서 모든 것이 실행될 것으로 기대하십니까? – oerkelens