2012-03-06 3 views
2

하나 이상의 인수를 입력으로 허용하는 식을 작성하는 식을 작성하려고합니다.이 식은 nhibernate 쿼리 오버 엔진의 where 절로 사용됩니다.여러 매개 변수가있는 Func의 표현

System.Exception을 : 인식 할 수없는 메서드 호출 : 왜 표현을 사용하고 System.Func`3[[MyClass, Assembly, Version=9.123.434, Culture=neutral, PublicKeyToken=null],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=wjerkwr234],[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=234234123]]:Boolean Invoke(MyClass, Int32)

Expression<Func<MyClass, int, bool>> restricton= 
     (myClassObject, myNumber) => myClassObject.Property1== myNumber; 

session 
    .QueryOver<MyClass>() 
    .Where(x =>x.Property2==1) 
    .And(x=>restriction.Compile().Invoke(x, 2)) 

현재 내가 말하는 오류는 무엇입니까? 그것은 쿼리 오버 문을 생성하는 함수의 매개 변수이고 조건은 변경할 수 있습니다.

위의 코드에 어떤 문제가 있습니까?

답변

6

linq 공급자는식이 필요하지만 Compile()을 사용하므로 대리인에게 제공합니다.

int myNumber = 5; 
Expression<Func<MyClass, bool>> restricton= 
    myClassObject => myClassObject.Property1 == myNumber 

session.QueryOver().Where(x => x.Property2 == 1).And(restriction) 

업데이트 : 문제 FIRO 쿼리

session.QueryOver().Where(x => x.Property2 == 1).And(CreateRestriction(2)) 

Expression<Func<MyClass, bool>> CreateRestriction(int myNumber) 
{ 
    return myClassObject => myClassObject.Property1 == myNumber; 
} 
+0

를 구성 할 때이 알려진 경우 I는 식을 구성하고 때 myNumber가 설정 될 수 없음을 내가 두 번째 있었던 파라미터로 한 이유입니다 .. 그 다음 해결책은 무엇입니까? – user917670

관련 문제