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