2012-01-04 65 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