LINQ查询C#中的多个左连接

时间:2011-12-20 21:46:43

标签: c# linq left-join

我需要有多个左连接的LINQ查询的帮助。这是LINQ到EF4。我写了SQL并将其转换为LINQ,不知道LINQ中的'join'是一个内连接。我一直在寻找一个例子,但只能找到一个左连接的例子。非常感谢任何帮助!

这是SQL:

SELECT
    s.FirstName, s.LastName, s.StakeholderID, op.ParticipantID, op.SchoolID, oc.CycleNumber, 
    st.SessionTypeID, st.SessionDescription, CONVERT(varchar(10),os.SessionDt,101) AS SessionDTrr, 
    os.OSStatus, oee.EvaluatorID
FROM
    Stakeholders s LEFT JOIN ObservationParticipants op ON s.StakeholderID = op.StakeholderID
    LEFT JOIN ObservationEvaluateeEvaluators oee ON op.ParticipantID = oee.EvaluateID
    LEFT JOIN ObservationCycles oc ON oee.ObservationEvaluateeEvaluatorID = oc.ObservationEvaluateeEvaluatorID
    LEFT JOIN ObservationSessions os ON oc.ObservationCycleID = os.ObservationCycleID
    LEFT JOIN SessionTypes st ON os.SessionTypeID = st.SessionTypeID
WHERE 
    oee.EvaluatorID = evaluatorID

这是我转换上述语句的LINQ。我需要联接才能加入。任何人都可以协助将此LINQ中的连接转换为左连接吗?

from s in Stakeholders
join op in ObservationParticipants
on s.StakeholderID equals op.StakeholderID
join oee in ObservationEvaluateeEvaluators
on op.ParticipantID equals oee.EvaluateID
join oc in ObservationCycles
on oee.ObservationEvaluateeEvaluatorID equals oc.ObservationEvaluateeEvaluatorID
join os in ObservationSessions
on oc.ObservationCycleID equals os.ObservationCycleID
join st in SessionTypes
on os.SessionTypeID equals st.SessionTypeID
where oee.EvaluatorID == evaluatorID
select new { 
            s.FirstName, s.LastName, s.StakeholderID, 
            op.ParticipantID, op.SchoolID, oc.CycleNumber,
            st.SessionTypeID, st.SessionDescription, os.SessionDt,
            os.OSStatus
            }

1 个答案:

答案 0 :(得分:0)

看起来像是混合技术。 linq查询对象,其中sql查询关系数据库。非常不同的事情。 linq有不同的实现: linq to sql EF查询语言 linq到xml linq到NH linq到厨房水槽

每个linq提供商都会以不同的方式翻译查询,而且翻译的方式和位置并不总是很明显。

在这种情况下,你需要通知我们你正在使用什么linq提供程序,从那里我们可以帮助将sql查询转换为linq2?言。