Я никогда не писал linq запросов для такого рода вещей, так как я бы предпочел использовать встроенный репозиторий активных каталогов. Если вы хотите пойти по этому маршруту:
Сначала я должен убедиться, что в вашей базе данных настроены соответствующие внешние ключи:
Table 'Roles'
int Id (PK)
Table 'Users'
int Id (PK)
Table 'UsersAndRoles'
int RoleId (FK)
int UserId (FK)
Если это сделано правильно, Subsonic3 сгенерирует классы для вас, создавая дочерние объекты IQueryable. Если вы хотите, чтобы все роли были привязаны к пользователю, вам также необходимо добавить список UsersAndRoles в объект Role. Вам придется называть это по-другому, поскольку вы не можете назвать его так же, как объект IQueryable :
public partial class Role()
{
public int Id { get; set; }
public string Rolename { get; set; }
public string Description { get; set; }
private IList<UsersAndRoles> _UserToRoleLinks
public IList<UsersAndRoles> UserToRoleLinks
{
get
{
if(_UserToRoleLinks == null)
_UserToRoleLinks = this.UsersAndRoles.ToList();
return _UserToRoleLinks;
}
}
}
public partial class UsersAndRoles
{
private Role _Role;
public Role Role
{
get
{
if (_Role == null)
_Role = this.Roles.SingleOrDefault();
return _Role;
}
set
{
_Role = value;
}
}
private User _User;
public User User
{
get
{
if (_User == null)
_User = this.Users.SingleOrDefault();
return _User;
}
set
{
_User = value;
}
}
}
Теперь, чтобы получить все роли с подключенными пользователями, сделайте следующее:
var roles = Role.All();
для доступа ко всем пользователям для всех ролей:
foreach (var role in roles)
{
foreach (var userToRoleLink in role.UserToRoleLinks)
{
var currentUser = userToRoleLink.User;
}
}
Конечно, это от руки, поэтому обязательно должны быть ошибки компиляции. Дайте мне знать, если это помогает или нет. Удачи!