Задать вопрос

Как сформулировать 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 ...?
  • Вопрос задан
  • 592 просмотра
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Учебный центр IBS
    SDP-030_PRG Продвинутая разработка в Microsoft .NET
    1 неделя
    Далее
  • Ulearn.me
    Проектирование на языке C#
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 1
impwx
@impwx
Разработчик
Если вы говорите именно про EF, то у каждого User будет свойство Roles с коллекцией ролей, и наоборот, где автоматически сгруппированы нужные вам данные. Запрос можно написать так:

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

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

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