Asp.net身份我可以写什么linq查询来返回所有用户的角色,包括没有角色的用户?

时间:2017-06-20 09:40:25

标签: c# asp.net-mvc entity-framework entity-framework-6 asp.net-identity

我希望让所有用户按照自己的名称分配角色,并且还包括没有任何角色的用户。

到目前为止,我尝试使用asp.net身份2

from user in users
from identityUserRole in user.Roles
join identityRole in identityRole on identityUserRole.RoleId equals identityRole.Id into r
from roles in r
group roles.Name by user.UserName into g
select new
{
    UserName = g.Key,
    Roles = g.ToList()
};

但这只返回有角色的用户..

3 个答案:

答案 0 :(得分:1)

执行"左连接"使用空角色列表,请尝试:

from roles in r.DefaultIfEmpty()

答案 1 :(得分:1)

我更喜欢使用模型来映射数据:

Views Count

然后让所有用户及其角色名称如下:

public class UserDto
{
    public string UserName { set; get; }
    public List<string> Roles { set; get; }
}

答案 2 :(得分:0)

你也可以简化你的查询。

var userAndRoles = users.Select(user => new
{
    UserName = user.UserName,
    Roles = roles.Where(role => user.Roles.Any(userRole => userRole.UserId == user.UserId && userRole.RoleId == role.RoleId))
});