2012-09-12 79 views
0

我在這些clases的形式兩個表LINQ相交?

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

} 

所以第一個表包含所有的電影第二包含電影被租

如何選擇留在店裏所有的電影,即不租並可用。試圖soething像:

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

,但沒有工作...

+0

通常你會使用'Except'但你的對象是不同類型的,你不能在這種情況下使用它。一個十字路口就是你想要的對立面。 –

回答

7

第一種方式做到這一點是過去所有電影和每個看是否存在具有相同MovieID沒有成交:

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

第二種方法是進行左連接。我們將來自「影片」的所有行和來自「事務」的等效行連接起如果在交易中沒有行對電影一排,則該行的交易是空(DefaultIfEmpty):

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

哦,這是非常重要的理解它。我加了一些單詞。告訴我你是否需要更多。 –