2012-09-12 3 views
0

나는이 clases의 형태로 두 테이블이LINQ intersect?

public class Movie 
{ 
    private int MovieID; 
    private string Title; 
} 
public class transactions 
{ 
    private int TransactionID; 
    private int MovieID; 

} 

그래서 첫 번째 테이블은, 내가 가게에 남아있는 모든 영화를 선택하려면 어떻게

임대 즉, 임대되지 않은 2 영화를 포함하는 모든 영화를 포함 사용할 수 있습니다. 시도 soething 같은 :

var moviesavailable = 
    (from m in db.Movies 
    select m.MovieID).Intersect 
    (from trans in db.Transactions 
    select trans.MovieID) 

하지만 작동하지 않습니다 ... 그것은 같은 MovieID에있는 트랜잭션 (transaction)가없는 경우 보이는 모든 영화를 가서 각각있다 할

+0

는 일반적으로 당신이'Except'을 사용하지만 객체가 다른 유형의만큼 당신은 할 수 없습니다 : 영화의 행에 대한 거래에는 행이없는 경우,이 행에 대한 트랜잭션 (DefaultIfEmpty) 널 이 경우에 사용하십시오. 교차로는 당신이 원하는 것의 oposite입니다. –

답변

7

첫 번째 방법 :

db.Movies.Where(m => !db.Transactions.Any(t => t.MovieID == m.MovieID)) 

두 번째 방법은 왼쪽 결합을 만드는 것입니다. 우리는 Movies의 모든 행과 Transaction의 해당 행을 결합합니다.

from m in db.Movies 
join t in db.Transactions on m.MovieID equals t.MovieID into g 
from t in g.DefaultIfEmpty() 
where t == null 
select m.MovieID 
+0

와우 정말 대단하다 !!! thnx 만약 내가 그것을 이해할 수 있다면 그것은 위대 할 것이지만 그것의 중요한 작용을 할 것입니다. 나는 훨씬 더 어색한 해결책을 가졌습니다. – Jalle

+2

아, 그것을 이해하는 것이 중요합니다. 나는 약간의 단어를 더했다. 더 필요하면 말해줘. –

관련 문제