2012-01-04 73 views
1

我有3個名爲Player,PlayerDetails和Team的表。我想寫一個LINQ的語句,如多個表加入Linq

from p in Player join d in PlayerDetails on p.ID equals d.PID 

,然後右鍵加入團隊表,玩家必須面對到團隊表的ID列命名爲TID。

我試圖寫如下語句

from p in Player join d in PlayerDetails on p.ID equals d.PID into PlayerGroup 
from t in team join g in PlayerGroup on t.ID equals g.p.ID 

這肯定是行不通的。我不知道如何編寫這種類型的查詢語句,表左連接table2然後右連接table3。

誰能幫忙?

回答

1

我相信你可以做這樣的事情:

var LeftJoin = 
    from p in Player 
    join d in PlayerDetails on p.ID equals d.PID into pd 
    from d in pd.DefaultIfEmpty() 
    select new 
    { 
     pID = p.ID, 
     pTID = p.TID, 
     dID = d.ID 
    }; 

var RightJoin = 
    from t in Team 
    join l in LeftJoin on t.ID equals l.pTID into tl 
    from l in tl.DefaultIfEmpty() 
    select new 
    { 
     tID = t.ID, 
     pID = l.pID, 
     pTID = l.PTID, 
     dID = l.dID 
    }; 

要在一個查詢中所做的一切,我覺得你可以做(​​未測試)是這樣的:

var RightJoin = 
    from t in Team 
    join l in 
     (from p in Player 
     join d in PlayerDetails on p.ID equals d.PID into pd 
     from d in pd.DefaultIfEmpty() 
     select new 
     { 
      pID = p.ID, 
      pTID = p.TID, 
      dID = d.ID 
     }) 
    on t.ID equals l.pTID into tl 
    from l in tl.DefaultIfEmpty() 
    select new 
    { 
     tID = t.ID, 
     pID = l.pID, 
     pTID = l.PTID, 
     dID = l.dID 
    }; 
+0

嗨Ole_Brun,謝謝期待你的答覆。我知道它當然運作良好,但是,我可以寫一條而不是兩條? – James 2012-01-04 08:15:44

+0

@AI_Bryant查看我更新的答案 – 2012-01-04 08:46:03