簡體   English   中英

Asp.net身份我可以編寫哪種linq查詢來返回所有具有其角色的用戶,包括沒有角色的用戶?

[英]Asp.net identity What linq query can I write to return all users with their roles including users without role?

我想讓所有用戶按照其名稱分組其角色,並且還包括沒有任何角色的用戶。

到目前為止,我正在使用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()
};

但這僅返回具有角色的用戶。

我更喜歡使用模型來映射數據:

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

然后像這樣獲取所有用戶及其角色名:

var users = (from u in db.Users
             let query = (from ur in db.Set<IdentityUserRole>()
                          where ur.UserId.Equals(u.Id)
                          join r in db.Roles on ur.RoleId equals r.Id
                          select r.Name)
             select new UserDto { UserName = u.UserName, Roles = query.ToList() })
             .ToList();

要使用空的角色列表執行“左聯接”,請嘗試:

from roles in r.DefaultIfEmpty()

您也可以簡化查詢。

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))
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM