LINQ左外连接

来源:互联网 发布:在笔记本电脑下载软件 编辑:程序博客网 时间:2024/05/16 13:00

       左连接或左外连接:包含左边的表的所有行,如果右边表中某行没有匹配,该行内容为空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()

效果