你可以试试看:
//Associate the role names with the features
var featureRoles = dbContext.Roles.Join(dbContext.Features,
role => role.RoleId,
feature => feature.RoleId,
(role, feature) => new {
RoleId = feature.RoleId,
UserId = feature.UserId,
RoleName = role.RoleName
});
//Create ILookup
var lookup = dbContext.Users.Join(featureRoles,
user => user.UserID,
fr => fr.UserId,
(user, fr) => new {
User = user,
RoleName = fr.RoleName,
RoleId = fr.RoleId
})
.ToLookup(r => r.RoleName, s => s.User);
这将按用户的角色名称对用户进行排序,例如:
var users = lookup["role 1"];
foreach(var user in users)
{
Console.WriteLine("Users in Role 1:");
Console.WriteLine("\t{0} {1}", user.Firstname, user.Lastname);
}
Output:
"Users in Role 1:"
"John Smith"
"Foo Bar"
...
如果您想通过角色 ID 而不是名称进行搜索,则需要将查找定义更改为 .ToLookup(r=> r.RoleId, s=> s.User)