在我的数据库中,我有角色和用户,我也有用户角色将2连在一起。
问题是试图让所有用户获得他们的角色(如果他们有任何角色,他们可能没有)。
我使用此查询:
return (from ur in db.UserRoles
join r in db.Roles on ur.RoleID equals r.ID
group r by ur.UserProfileID into ugr
join u in db.UserProfiles on ugr.Key equals u.ID
select new UserModel() {
ID = u.ID,
Username = u.UserName,
IsLockedOut = u.IsLockedOut,
LastLoginDate = u.LastLoginDate,
UserRoles = (from r in ugr
select new RoleModel() {
Name = r.Name,
ID = r.ID
}).ToList()
}).ToList();
这适用于至少拥有一个角色的用户,但我也希望用户没有角色。
我目前正在尝试使用http://msdn.microsoft.com/en-us/library/bb397895.aspx DefaultIfEmtpy(),但我不知道如何以及在何处放置它,这意味着我尝试我的代码无法编译。
如果我的所有用户都没有链接到UserRoles,我如何获得所有用户?
答案 0 :(得分:2)
首先获取用户并从中包含他们的角色
return db.UserProfiles
.Include(up => up.UserRoles)
.Select(u => new UserModel() {
ID = u.ID,
Username = u.UserName,
IsLockedOut = u.IsLockedOut,
LastLoginDate = u.LastLoginDate,
UserRoles = u.Roles
.Select(r => new RoleModel() {
Name = r.Name,
ID = r.ID
})
})
.ToList();
return db.UserProfiles
.Include(up => up.UserRoles)
.Include("UserRoles.Roles") // <-- Added further include
.Select(u => new UserModel() {
ID = u.ID,
Username = u.UserName,
IsLockedOut = u.IsLockedOut,
LastLoginDate = u.LastLoginDate,
// Modified this to use joining table
UserRoles = u.UserRoles
.Select(ur => new RoleModel() {
Name = ur.Role.Name,
ID = ur.RoleID
})
})
.ToList();