2010-10-04 23 views
2

加入的問題,我有如下表在LINQ

T1  
    ==== ====== 
    ID  Desc 
    ==== ====== 
    1  t1 
    2  t2 
    3  t3 
    4  t4 


T2 
===== ======= ======== 
ID  T1ID  PT1ID 
===== ====== ========= 
1  2   1 
2  3   2 

在T2既T1ID和PT1ID是T1外鍵。在我的輸出中,我想要ID = 4的行,因爲它在兩個外鍵列中都沒有任何匹配的行

+0

你的意思是你需要一個外連接嗎?如果你能顯示你的linq代碼會很有幫助。 – 2010-10-04 09:49:07

+0

我認爲他的意思是'select * from T1 where not exists(select * from T2 where T2.T1ID = T1.ID)並且不存在(select * from T2 where T2.PT1ID = T1.ID)' - 除了LINQ – Rup 2010-10-04 09:50:10

回答

1

這應該千方百計想讓你想要的:

var notInT2 = T1.Where(i => T2.All(e => e.T1ID != i.Id) && 
          T2.All(e => e.PT1ID != i.Id)); 

爲了測試它:

class RowT1 { public Int32 Id;} 
class RowT2 { public Int32 T1ID; public Int32 PT1ID; } 

class Programm 
{ 
    static void Main() 
    { 
     var T1 = new List<RowT1>(){new RowT1(){Id=1}, 
            new RowT1(){Id=2}, 
            new RowT1(){Id=3}, 
            new RowT1(){Id=4}}; 

     var T2 = new List<RowT2>(){new RowT2(){T1ID=2, PT1ID=1}, 
            new RowT2(){T1ID=3, PT1ID=2}}; 

     var notInT2 = T1.Where(i => T2.All(e => e.T1ID != i.Id) && 
            T2.All(e => e.PT1ID != i.Id)); 

     Console.ReadLine(); 
    } 
} 
+0

它像魅力感謝 – Tassadaque 2010-10-04 11:48:54

1

我不是100%清楚你正在嘗試做什麼。

我假設你想要返回來自T1的所有行和來自T2的任何匹配行,其中列T1ID或PT1ID值等於T1 ID列。

如果是這種情況,您需要外連接。外從MSDN microsoft Forums