2016-08-26 20 views
1

したがって、Entity Frameworkを使用してSQL Serverストアドプロシージャを変換する作業を進めています。私がやらなければならないクエリーの1つは、where節で使用されるようになるテーブルとの左結合です。Linq null参照の可能性がある条件

var union3 = (from o in orgs 
        from uos in accessOrgIds.Where(x => o.Id == x) 
        from sr in secRoles.Where(x => x.Id == secRoleId).DefaultIfEmpty() 
        where (o.StatusId == 1) 
        && (secRoleId == 0 || sr == null ? false : sr.Id == secRoleId) 
        select o); 

union3(現在の選択をPS-無視し、私は、デバッグ目的の周りにそれを変更)srは、where句から削除されるたびにoの結果セットを有しています。次のSQLと同じ効果を持つクエリにテーブルを含めるにはどうすればよいですか?

SELECT 
     ISNULL(SR.Id, @securityRoleId), 
     O.Id, 
     O.Name AS OrganizationName, 
     SR.Name AS SecurityRoleName, 
     -1 AS IsSelected, 
     SR.[Description], 
     SR.IsSystem, 
     SR.IsOATI, 
     ISNULL(SR.StatusId, 1) AS StatusId, 
     SR.IsAdmin 
    FROM 
     Organizations O WITH (NOLOCK) 
     INNER JOIN @userOrganizations UOS ON UOS.OrganizationId = O.Id 
     LEFT JOIN SecurityRoles SR WITH (NOLOCK) ON SR.Id = @securityRoleId 
    WHERE O.StatusId = 1 
    AND (@securityRoleId = 0 OR SR.Id = @securityRoleId) 

PS - @userOrganizations表は、以下のようにあなたが試すことができ、正しく

答えて

0

を働いているストアドプロシージャ、さらにアップに使用されます。

var union3 = (from o in orgs 
       join uos in userOrganizations on uos.OrganizationId equals o.Id 
       join sr in SecurityRoles on o.secRoleId equals sr.Id into gj 
       from subsr in gj.DefaultIfEmpty() 
       where (o.StatusId == 1) 
        && (o.secRoleId == 0 || sr.Id == o.secRoleId) 
        select o); 

ここではPerform Left Outer Joinsについて知ることができます。

+0

これはあなたのため、または何のために働いていますか? – Sampath

関連する問題