, 나는 일반적으로 다음의 사용을 구성 1을 만들 수 있습니다 이것은 내가 인 항목을 테이블에서 찾을 때 MyEntity
과 일치하는 것을 의미합니다.변수 값을 표현식 트리에서 클로저에 대한 멤버 액세스로 모델링해야하는 이유는 무엇입니까?</p> <pre><code>dbContext.Contents<MyEntity>() </code></pre> <p>(<code>dbContext</code> 사용자 정의 클래스이다.) 은 어떻게 든, Linq1Entities/엔티티 프레임 워크 이해 : 나는 람다 식으로 우리의 응용 프로그램에서 표현을 쓸 때
이제는 System.Linq.Expressions
클래스를 사용하여 표현식을 구성하고 있습니다. 그래서 같이 상기 단편을 복제하도록 시도 :
Expression.Call(Expression.Constant(dbContext), contentsMethod)
contentsMethod
반사에 의해 이전에 적절한 MethodInfo
로 초기화되었다.
불행히도, 이것은 작동하지 않습니다. Entity Framework는 dbContext
개체를 SQL로 변환 할 수 없다는 불만을 표시합니다.
저는 람다 식으로 원했던 것과 유사한 표현식을 작성했으며 디버거에서 결과 식 트리를 보았습니다. 흥미롭게도 상수 대신에 dbContext
은 클로저 개체 인 것처럼 보이는 member access
으로 모델링되었습니다.
왜 그렇습니까? 지역 변수 dbContext
이 표현식의 클로저에 대한 멤버 액세스로 표현되는 이유는 무엇이며 왜 상수 값으로도 작동하지 않는 이유는 무엇입니까? 내 경우에는 dbContext
이 둘러싼 메서드의 매개 변수였던 것이 중요합니까?
제 질문은 이 아니며 내 문제를 해결하는 방법입니다. 이미 수동으로 작성한 표현식에 본문을 추가하는 추가 람다 식으로 위에 표시된 조각을 도입하여 이미 수행했습니다.
1 : 사용되는 단편은 다음의 표현 방법의 예 :
dbContext.Contents<MyEntity1>().Where(e1 => dbContext.Contents<MyEntity2>().Any(e2 => e1.Name == e2.Key))
dbContext는 다른 테이블로 구성된 데이터베이스 개체입니다. 선택 쿼리 테이블. 테이블은 다른 데이터 유형을 가진 컬럼으로 구성됩니다. 일반적으로 캐스팅은 열의 필드 유형에서 발생합니다. – jdweng
'dbContext.Contents()'을 사용하는 방법에 대한보다 완벽한 예를 보여줄 수 있습니까? 질문은 매우 불분명 한 듯하다. 나는 당신이 dbContext 매개 변수를 이해하고, 그것을 일부 λ에 전달하고, 그것을 가져오고 그것의 접근은 클로저 객체의 멤버 접근이된다. –
Evk
@Evk : 각주를 짧고 익명으로 표시했지만 표시된 단편을 포함하는 완전한 표현식을 추가했습니다. –