2011-05-04 5 views
0

어떻게 엔티티 프레임 워크의 엔티티에 LINQ에서 다음을 수행 할 수 있습니다 :이 방법을 인식하지 않기 때문에표현 - 인식 할 수없는 방법

public static Expression<Func<T, bool>> IsOk<T>(long? entityId) 
{ 
    return x => (!entityId.HasValue || entityId.Value == x.GetEntityId()); 
} 

x.GetEntityId()는 예외를 반환합니다.

+0

답변이 없지만 언제부터 'IsOK'가 메소드 이름으로 잘라 버렸습니다! –

+1

@ 밀 Whe : 그것은 단지 예일뿐입니다. – Naor

+0

@Naor; 당신은 일을 너무 복잡하게 만들려는 가능성을 고려 했습니까? 그냥 생각 .... –

답변

0

데이터베이스가 GetEntityId() (이해할 수 없기 때문에)을 실행할 수 없으므로 Linq 제공 업체가 번역 할 수 없습니다.


UPDATE

그래서 당신은 그것을 해결할 수있는 방법 :

  • 이드 따라서 데이터베이스의 컬럼에 매핑 된 개체의 속성이어야합니다. 이 식으로 쉽게 표현식에 사용할 수 있습니다.
  • ID가 계산 된 경우 (GetEntityId()에 논리가 있음) 클라이언트에서 수행해야합니다. 모든 행을 반환하고 그 후에 C#에서 필터링을 수행합니다. 물론 그것이 당신의 공연에 무엇을 할 것인지 말할 필요는 없습니다.
+0

그래서 어떻게 해결할 수 있습니까? 어떤 옵션이 있습니까? ExpressionTree와 관련이 있습니까? – Naor

+0

내 업데이트를 참조하십시오. – Aliostad

+0

속성을 db에 매핑했습니다. – Naor

1

난 당신의 형식 매개 변수를 제안 할 것이다는

interface IMyExpectation { 
    int GetEntityId(); 
} 

를 포함하고 그 인터페이스로 메소드의 형식 매개 변수를 제한 IMyExpectation 같은 사용자 지정 인터페이스로 제한 될 수있다. 당신이 그것을 필요로하는 인터페이스를 구현하는 엔티티 프레임 워크 클래스에 다음

public static Expression<Func<T, bool>> IsOk<T>(long? entityId) 
     where T: IMyExpectation // << restrict the type to what is needed 
{ 
    return new Func<T, bool>(
     x => !entityId.HasValue || entityId.Value == x.GetEntityId() 
); 
} 

을 (지금이. 멀리 GetEntityId 방법은 간다 컴파일)하지만 모델 때문에 별도의 파일에있는 클래스의 partial 부분에 모델이 다시 생성 될 때마다 사용자 지정 코드가 지워지지는 않습니다. 예 :
참고하여 EF 모델 개체에

:이 Aliostad's answer의 적용을받습니다.

public partial class Customer : IMyExpectation { //... 

public partial class Invoice : IMyExpectation { //.... 

// etc 

또는
참고하여 포항 강판에이 지금 EF 클래스

public class CustomerPoco: IMyExpectation { //... 

public class InvoicePoco : IMyExpectation { //... 

당신의 실체와 클래스 (당신이 'IMyExpectation'를 구현 무엇에 의해 방해하는 경우 잘 작동합니다 on)은 모두 원래의 방법이 원하는대로 표현하고 있습니다.
마지막으로 메서드는 인터페이스를 구현 한 이러한 것들을 모두 이해하므로 type 매개 변수를 통해 메서드에 전달할 후보가됩니다.

당신이이 대답에 대한 올바른 시나리오라면, 그 것들을 잘 포장해야합니다.

+0

@ John K : db가 GetEntityId()를 모르기 때문에 도움이되지 않습니다. – Naor

+0

나는 또한 T ...가 비행 중에 글을 쓰고 있다고 덧붙였다. 당신의 로직이 GetEntityId() 메소드를 가진'ClassName' 클래스에 접근 할 수 있습니까? –

+0

결국 나는 총을 맞았고 인터페이스를 제안했다. 내가 확신 할 수 없기 때문에 나는 당신의 필요에 맞는 방향으로 갔다.이 대답이 기초가 아니라면 나는 그것을 소음으로 지울 것이다. –

관련 문제