LINQ左外连接

       左连接或左外连接:包含左边的表的所有行,如果右边表中某行没有匹配,该行内容为空NULL。

       SQL语句select * from dbo.Project left join dbo.Voice on (dbo.Project.voiceID=dbo.Voice.ID)

      

        看一下网上的LINQ语句例子:左连接

         var userInfo=from s in db.Project

                              join c in db.Voice on s.voiceID equals c.ID into ProjectV

                              from pv in ProjectV.DefaultEmpty()  //???

                              select new {s.Name,s.bak,pv.NAME,s.ID};

        我实在是不知道pv代表的什么意思?

        再来对比一下例子。没有左外连接

list = (from u in dbcontext.t_announce
                                join a in dbcontext.t_user on u.userID equals a.userID
                                join b in dbcontext.t_type on u.typeID equals b.type_ID
                                join u2 in dbcontext.t_user on u.memberID equals u2.userID
                                join u3 in dbcontext.t_user on u.operateID equals u3.userID 
                                
                                where (u.departmentID == announce.departmentID && u.typeID == announce.typeID)
                                orderby u.date descending
                                select new GainViewModel()
                                {
                                    content = b.type_Name,
                                    date = u.date,
                                    usernamea = a.userName,
                                    states = u.announceType,
                                    dayGetID = u.announceID,
                                    score = u.score,
                                    shenqingren=u2.userName,
                                    userNamec = u3.userName //审批人
                                }).ToList();

       有左外连接

   list = (from u in dbcontext.t_announce
                                join a in dbcontext.t_user on u.userID equals a.userID
                                join b in dbcontext.t_type on u.typeID equals b.type_ID
                                join u2 in dbcontext.t_user on u.memberID equals u2.userID
                                join u3 in dbcontext.t_user on u.operateID equals u3.userID into JoinedEmpDept  
                                from u3 in JoinedEmpDept.DefaultIfEmpty()
                                where (u.departmentID == announce.departmentID && u.typeID == announce.typeID)
                                orderby u.date descending
                                select new GainViewModel()
                                {
                                    content = b.type_Name,
                                    date = u.date,
                                    usernamea = a.userName,
                                    states = u.announceType,
                                    dayGetID = u.announceID,
                                    score = u.score,
                                    shenqingren=u2.userName,
                                    userNamec = u3.userName //审批人
                                }).ToList();
关键在这
 join u3 in dbcontext.t_user on u.operateID equals u3.userID into JoinedEmpDept  
                                from u3 in JoinedEmpDept.DefaultIfEmpty()

效果



        


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值