2

私は、LINQに変換するのが非常に難しいinnerjoinとleftouter joinを持つSQLクエリを持っています。

SELECT project.ID, project.No, project.Name,  
       APPLN.Id,APPLN.Name,SAR.Name  
FROM Phasefact phase WITH (NOLOCK)  
INNER JOIN AProject project WITH (NOLOCK) on phase.Id = project.ID
INNER JOIN Application APPLN WITH (NOLOCK) ON project.AppId = APPLN.Id
LEFT OUTER JOIN Master master WITH (NOLOCK) ON phase.amId = master.Id
INNER JOIN Ref SAR WITH (NOLOCK) ON SAR.ID = master.Ref_Id
WHERE phase.ID = 123    

「左外部結合」が含まれているため、少し混乱します。誰か助けてください。

4

2 に答える 2

2

多分このようなもの:

var result=(
        from phase in db.Phasefact
        join project in db.AProject
            on phase.Id equals project.ID
        join APPLN in db.Application 
            on project.AppId equals APPLN.Id
        //Left join
        from master in db.Master
            .Where(a=>a.Id==phase.amId).DefaultIfEmpty()
        join SAR in db.Ref
            on SAR.ID equals master.Ref_Id
        where phase.ID == 123 
        select new
        {
            project.ID,
            project.No,
            project.Name,  
            APPLN.Id,
            APPLN.Name,
            SAR.Name
        }
    );

編集

しかし、私は取得しませんleft join。なぜあなたはを使用していleft joinますか?私には、最初に a を使用しているように見えますleft join:

LEFT OUTER JOIN Master master WITH (NOLOCK) ON phase.amId = master.Id

その後、次のように結果を制限する結合があります。

INNER JOIN Ref SAR WITH (NOLOCK) ON SAR.ID = master.Ref_Id

これは、これを行うのと同じになります:

INNER JOIN Master master WITH (NOLOCK) ON phase.amId = master.Id
INNER JOIN Ref SAR WITH (NOLOCK) ON SAR.ID = master.Ref_Id
于 2012-05-10T06:51:09.760 に答える
0

LINQ での左外部結合の基本的な考え方を説明します

var lines = from p in db.Phasefact
join m in db.Master on m.Id is equals p.amId into p_m where p.ID == 123 from m in p_m.DefaultIfEmpty() select new { p.ID };

これで、ロジックに従ってこれをさらに変換できます...またはクエリ.......

于 2012-05-10T06:48:22.567 に答える