2010-04-22 5 views
2

두 테이블의 ID 열 사이에 각각 외래 키와 일대 다 관계가있는 두 개의 테이블 (TABLE1, TABLE2 - 고유 한 것으로 알고 있음)이 있습니다.linq2sql 및 OR 연산자로 프리디 케이트 빌더를 사용하는 방법

나는 모든 TABLE1 항목을 선택하려고 linq2sql를 사용하여 같은 그들의 TABLE2 값을 대응하는 나는 그것을 통과 목록에 최소 1 항목을 포함하는.

다음은 그러나 오류를 NotSupportedException이 무엇입니까를 테스트 할 LINQPad (최고 프로그램)에서 내가 사용 된 몇 가지 예제 코드입니다 : '모든'질의 연산자에 사용되지 않는 과부하.

long[] items = { 3, 5, 8 }; 
var predicate = PredicateBuilder.False<TABLE2>(); 

foreach (long i in items) 
{ 
    long t = i; 
    predicate = predicate.Or(att => att.ID == t); 
} 

//TABLE2.Where(predicate).Dump(); //works like a charm 

IQueryable query = 
    from t1 in TABLE1 
    where t1.TABLE2.AsQueryable().Any(predicate) //problem with this line 
    select a; 

query.Dump(); 

UPDATE

LinqPad에 LinqKit가 LinqKit.dll 참조를 추가 추가 스페이스 수입 탭 LinqKit 추가 PredicateBuilder 또한 다음을 포함 해제하고 사용. EntitySet에 사용될 때

+0

여기에 비슷한 질문이 있습니다. http://stackoverflow.com/questions/2522079/generated-sql-with-predicatebuilder-linqpad-and-operator-any. VS에서 테스트하지 않았지만, LINQPad에서 쓰는 방법에 문제가있는 것 같습니다. – David

답변

2

해결 방법은, 식 변수에 TABLE1 객체

  • 통화 컴파일()에

    1. 통화 AsExpandable()이다.

    그래서 최종 쿼리

    IQueryable query = 
        from t1 in TABLE1.AsExpandable() 
        where t1.TABLE2.Any(predicate.Compile()) //the problem should disappear 
        select a; 
    

    더 많은 정보 here입니다.