Как сформулировать LINQ запрос для связи многие ко многим применительно к EF?

Есть следующие сущности:

Users:
UserId, Username
1, 'User 1'
2, 'User 2'
3, 'User 3'

Roles:
RoleId, Rolename
1, 'Role 1'
2, 'Role 2'
3, 'Role 3'

RoleUsers:
RoleUserId, RolePtr, UserPtr
1, 1, 1
2, 1, 2
3, 2, 1
4, 2, 2
5, 2, 3
6, 3, 3

С помощью связей RoleUsers.RolePtr <-> Roles.RoleId и RoleUsers.UserPtr <-> Users.UserId создана связь Users к Roles — многие ко многим.

Не могу сообразить, как сформулировать запрос чтобы получить сводную таблицу со всеми связями Roles и Users, чтобы потом группировкой получить роли конкретного пользователя. Хочется сделать это с наименьшими накладными затратами на приложение (пусть все делает сервер БД).

Результат:
RoleUserId, RolePtr, UserPtr, Rolename, Username
1, 1, 1, 'Role 1', 'User 1'
2, 1, 2, 'Role 1', 'User 2'
3, 2, 1, 'Role 2', 'User 1'
4, 2, 2, 'Role 2', 'User 2'
5, 2, 3, 'Role 2', 'User 3'
6, 3, 3, 'Role 3', 'User 3'

var query = from ...?
  • Вопрос задан
  • 589 просмотров
Пригласить эксперта
Ответы на вопрос 1
impwx
@impwx
Разработчик
Если вы говорите именно про EF, то у каждого User будет свойство Roles с коллекцией ролей, и наоборот, где автоматически сгруппированы нужные вам данные. Запрос можно написать так:

var query = DbContext.Users.Include(x => x.Roles).ToList();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы