2017-01-05 11 views
0

各セキュリティオブジェクトに対して割り当てられたアクセス許可の一覧に加えて、ユーザー(アカウント)がアクセスを許可するセキュリティオブジェクトを取得できるラムダクエリを作成する必要がありますEntity Framework Linqを使って多対多に照会する

方法はAuthObject List<AuthObject> GetUserAccessList (int accountId)

ある:

public class AuthObject 
{ 
    public string Obj { get; set; } // name of the security object 
    public List<String> Permissions { get; set; } //name of the permissions 
} 

enter image description here

答えて

1

2つのクエリを使用してデータをクエリし、それらをメモリでアセンブルします。

var securityObjects = await context.SecurityObjects.Where(so => so.SecurityPermissions.Any(sp => sp.SecurityRoles.Any(sr => sr.Accounts.Any(a => a.ID == accountId)))).ToListAsync().COnfigureAwait(false); 
var securityPermissionsByObjectId = (await context.SexurityPermissions.Where(sp =>sp.SecurityRoles.Any(sr => sr.Accounts.Any(a => a.ID == accountId))).ToListAsync().ConfigureAwait(false)).GroupBy(sp => sp.SecurityObjectID).ToDictionary(g => g.Key, g => g.Select(sp => sp.Name).ToList()); 

var result = securityObjects.Select(so => new AuthObject 
{ 
    Obj = so.Name, 
    Permissions = securityPermissionsByObjectId[so.ID] 
}) 
.ToList(); 

return result; 
関連する問題