日期:2014-05-20  浏览次数:20683 次

LINQ 左右连接查询 ###################### 100% 结贴
 sinlist = sobj.GetListInfo(conditionsql, "id desc");
            unlist=uojb.GetListInfo(" Legally='通过' ","");
            tsinlist=tsobj.GetListInfo("","");
            var resul= from  u in unlist
                        join t in tsinlist on u.UserId equals t.UserId   
                        from s in sinlist join 
                     select new



把sinlist  看作S 表, unlist看作U 表,tsinlist看作T表,用SQL 语句来写我想实现的是, 
select * from S left join (select * from T left join U on t.id=u.id) a 
on  S.ID=a.uid
 

在后台用LINQ 怎么写?坐等大神来, 

------解决方案--------------------
select * from S left join (select * from T left join U on t.id=u.id) a 
on  S.ID=a.uid


var query= from s in S
           join a in ( from t in T join u in U on t.id equlas u.id into lg
                       from u in lg.DefaultIfEmpty()
                       select t) A
           on s.ID equlas a.uid into l
           from a in l.DefaultIfEmpty()
           select s;

------解决方案--------------------
你的问题是因为left join,所以t有可能会出现null的情况 
------解决方案--------------------

from s in S
join t in T on s.sid equals t.id into st
from p in st.DefaultIfEmpty()
join u in U on u.id equals t.id into ut
from gin ut.DefaultIfEmpty()
select s

------解决方案--------------------
第五行from gin=from g in
------解决方案--------------------
左右同时连接的思路就是先左边groupjoin右边,再对key=null的组再按照右边分组。