2010-07-09 2 views
0

I는이 방법이있다. 내 문제는 작동하지 않는다는 것입니다. Equals 호출의 일부로 someId를 실제 값으로 바꾸면 작동합니다. 그러나 위의 메서드에 동일한 값을 전달하면 작동하지 않습니다.발현 및 파라미터

someId 매개 변수는 표현식이 실제로 사용될 때까지 평가되지 않으므로 실제 값을 포함하지 않습니다. 죄송합니다. 조금 혼란스러워합니다.

감사

업데이트 :

PARAM 하드

.Lambda #Lambda1<System.Func`2[MyEntity,System.Boolean]>(MyEntity $t) {\r\n .Call ($t.SomeProperty).Equals(\"test1\") 

작동하지 않습니다 하나 일부 디버그 정보 코딩 작업을 수행하는 하나 일부 디버그 정보 값은 메소드에 전달됩니다.

.Lambda #Lambda1<System.Func`2[MyEntity,System.Boolean]>(MyEntity $t) {\r\n .Call ($t.SomeProperty).Equals(.Constant<MyEntity+<>c__DisplayClass4>(MyEntity+<>c__DisplayClass4).someId) 

값이 하드 코딩되지 않은 경우 표현식에 존재하지 않는 참조가있는 것 같습니까? 미안, 여기에 무슨 일이 일어나고 있는지 혼란에 빠지다!

업데이트 2 :

가 사용되는 곳입니다 - 저장소 클래스의 메소드가 :

:

public MyEntity Get(string someId) 
{ 
    var queryPredicate = MyEntity.MyMethod(someId); 
    var foundEntity = this.Query(queryPredicate); 
} 

쿼리는 다음과 같이 저장소 기본 클래스의 방법이다

public IEnumerable<TEntity> Query(Expression<Func<TEntity, bool>> predicate) 
{ 
    if (predicate == null) 
    { 
     throw new ArgumentNullException("predicate"); 
    } 
    using (var context = new TContext()) 
    { 
     return context.CreateObjectSet<TEntity>().AsExpandable().Where(predicate).ToList(); 
    } 
} 
+0

가 해결되는지

http://www.albahari.com/nutshell/linqkit.aspx

그것에서 살펴보고 참조 이 결과를 사용하려는 코드를 표시 하시겠습니까? –

답변

1

이 LinqKit 당신이 찾고있는 해결책이 될 수있는 문제 같은 소리 : 그것은 할 수 있습니다 그것을 :)

+0

그게 내가 위의 예제에서 "AsExpandable"을 사용하고 있기 때문입니다. 생각해 줘서 고마워. 내가 뭘 잘못하고있는 다른 아이디어? –

+0

아! 나는 문제를 발견했기 때문에 "Equals"문자가 작동하지 않으면 공백이 포함 된 데이터베이스의 문자열 때문입니다. 아! 아! 아! 어쨌든 도움 주셔서 감사합니다 :-) –

0

주어진 값이 null이 아니 었습니까? 던졌습니다 예외를 줄 수 있습니까? ID로 전달해야하는 "int"일 수 있습니까?

+0

예외가 없으며 표현식을 사용할 때 아무것도 일치하지 않습니다. –

+0

코드가 해당 표현식을 사용하고 있습니까? 리턴 라인에 중단 점을 두십시오. 사용 중이면 퀵타임을 사용하여 값으로 사용하는 것을 바꿔 올바른 방법을 찾으십시오. –

+0

두 번 모두 사용하고 있는지 100 % 확인하십시오. –

0

필자는 이것을 테스트 할 hnady를 가지고 있지 않지만 IL 코드에서 someId를위한 클로저를 만드는 것으로 보인다. 기본적으로 컴파일 된 func/표현식은 나중에 실행될 &이고, 컴파일은 표현식이 생성 된 시점이 아니라 실행될 때 someId 값을 원한다고 가정합니다. 나는 그것이 임시 직원을 통해 그것을 통과한다면, 그것이 효과가 있어야한다고 생각합니다.

public static Expression<Func<MyEntity, bool>> MyMethod(string someId) 
{ 
    string tempSomeId = someId; 
    return o => o.SomeProperty.Equals(tempSomeId); 
} 
+0

고마워, 그건 내가 생각해 왔던 종류 야. 그러나 위의 방법은 여전히 ​​불행하게도 작동하지 않습니다. –