2009-07-22 4 views
3

범위 변수가 부울을 반환하는 정적 메서드에서 평가되는 linq 식을 사용하여 List에서 선택하려고합니다. 메서드를 사용하여 범위 변수를 계산할 때 true를 반환하는 범위 변수를 선택하고 싶습니다.Linq 메서드를 람다 식으로 계산

그것이 대리자 형식이 아니기 때문에 '부울'을 입력 람다 식을 변환 할 수 없습니다 :

var result = from rangeVariable in DataSource 
      where (rangeVariable => Foo.MethodReturnsBoolean(rangeVariable) == true) 
      select rangeVariable; 

나는이 오류가 발생합니다.

아무도 무슨 일이 일어나고 있는지 설명하고이를 어떻게 달성 할 수 있습니까?

답변

18

"Where"절에 람다식이 필요하지 않습니다. 쿼리 식 변환을 사용하면이 작업을 수행 할 수 있습니다. 그냥 사용

var result = from rangeVariable in DataSource 
      where Foo.MethodReturnsBoolean(rangeVariable) == true 
      select rangeVariable; 

나는 개인적으로 다음 제거 할 것 "== true"로 중복 (나는 ... 이것은 단지 샘플 코드이었다 알고 있지만) :

var result = from rangeVariable in DataSource 
      where Foo.MethodReturnsBoolean(rangeVariable) 
      select rangeVariable; 

그때 무엇을 생각 하는데요 쿼리 식을 사용하면 실제로 구매할 수 있습니다. 당신은이 "여기서"당신이 찾을 수 있습니다 (또는 단지가 "선택"일을)하고 단지 경우 점 표기법 간단 :

var result = DataSource.Where(x => Foo.MethodReturnsBoolean(x)); 

그것은 더 나은 불구 가져옵니다 컴파일러는 추론 할 필요가 없습니다

var result = DataSource.Where(Foo.MethodReturnsBoolean); 

이 얼마나 깨끗 : (항상 bool 될 것이기 때문에) 그래서 당신은 단지 방법 그룹 변환을 사용할 수있는 람다 식에서 값을 반환? :)

+0

매우! 감사합니다 존! – theringostarrs

+0

+1 내 머리가 회전을 멈춘 후에 대답 할게) – Gishu

+0

Datacontext.table에서 rangeVariable에서 var =를 시도했을 때 어디에 me.MethodThatReturnsBoolean (rangeVariable)을 선택했는지 rangeVariable을 선택했습니다. Runtime이 발생했습니다. NotSupportedException : Method 'Boolean MethodThatReturnsBoolean (System.String) '는 SQL에 대한 변환을 지원하지 않습니다. 어떤 부울 함수가 where 절에 포함될 수 있습니까? 어떤 제안? http://stackoverflow.com/questions/8662259/what-does-intellisense-mean-when-it-shows-that-it-expects-a-condition-in-the-w – bernie2436

관련 문제