2010-03-26 4 views
2

I previously asked Linq To Entities의 연결 조건에 대한 질문. 이제 LinqKit을 사용하면 모든 것이 잘 동작합니다. 생성 된 SQL을보고 싶습니다. this answer을 읽은 후 LinqPad을 사용합니다. 코드는 VS2008에서 작동PredicateBuilder, LINQPad 및 연산자 ANY로 생성 된 SQL

var predProduct = PredicateBuilder.True<Product>(); 
var predColorLanguage = PredicateBuilder.True<ColorLanguage>(); 

predProduct = predProduct.And(p => p.IsComplete); 

predColorLanguage = predColorLanguage.And(c => c.IdColorEntity.Products.AsQueryable().Any(expr)); 

ColorLanguages.Where(predColorLanguage).Dump(); 

는, 컴파일하고 올바른 결과 세트를 생성하지만, LinqPad에, 나는 다음과 같은 오류했습니다 :

NotSupportedException: The overload query operator 'Any' used is not Supported. 

어떻게을

내 문이다 LINQPad가 실패하면 생성 된 SQL이 표시됩니까?

편집

내가

var predColorLanguage = PredicateBuilder.True<ColorLanguage>(); 

predColorLanguage = predColorLanguage.And(c => c.IdColorEntity.Products.Any((p => p.IsComplete)); 

ColorLanguages.Where(predColorLanguage).Dump(); 

작품을 작성하는 경우 ... 무슨 일? , explained in the LINQKit article으로

var predProduct = PredicateBuilder.True<Product>(); 
var predColorLanguage = PredicateBuilder.True<ColorLanguage>(); 

predProduct = predProduct.And(p => p.IsComplete); 

predColorLanguage = predColorLanguage.And (
    c => c.IdColorEntity.Products.Any(predProduct.Compile())); 

ColorLanguages.AsExpandable().Where(predColorLanguage).Dump(); 

: 당신이 LINQKit를 사용하는 것처럼

답변

2

, 당신은 메인 쿼리() AsExpandable를 호출 한 다음 EntitySet을 공급하는 표현에 컴파일()를 호출하고,하여이 작업을 할 수 있습니다 컴파일 메서드는 실제로 실행되지 않습니다. AsExpandable은이를 제거하고 식 트리를 수정하여 LINQ to SQL과 함께 작동합니다.

+0

문제는 Visual Studio에서가 아니라 LinqPad에서 발생합니다. Visual Studio에서 문제없이 작동합니다. 나는 운이없는 당신의 해결책을 시도했다. –

+0

Entity Framework를 사용하고 있습니까? 그렇다면 LINQPad에 연결할 때 'Custom EF Context'를 선택 하시겠습니까? 대신 LINQPad의 데이터베이스에 직접 연결하면 LINQ to SQL을 사용하여 차이점을 설명 할 수 있습니다. –