2015-07-24 5 views
2

Посмотрите на мою модель ниже,Объединить две M: N отношений в EntityFramework

  1. Каждый пользователь получил п ролей
  2. Каждая роль получила п разрешения/каждое разрешение получили п ролей

Я m пытается получить права пользователя, чтобы иметь возможность выполнить группу на на нем, как я мог это сделать?

My data model

Я собирался написать запрос LINQ, как показано ниже:

from uRole in context.Users.Single(u => u.Id == userId).Roles 
    join p in context.Permission.Where(p => p.Type == ModelEnums.PermissionType.Module) 

Я не знаю, как написать запрос, может кто-нибудь наставит меня?

+1

Итак, почему вы не пишете и не проверяете результат работы вашего оператора и не сообщаете нам результат/проблему? – Zippy

+0

Проблема в том, что я не знаю, как написать запрос. –

ответ

2

Чтобы получить все разрешения пользователя можно использовать метод SelectMany расширения:

var permissions=context.Users.Single(u => u.Id == userId).Roles.SelectMany(r=>r.Permissions).Distinct(); 

называют также метод Distinct расширения для удаления дубликатов.

+0

Как новичок в EF, я никогда не замечал, что есть SelectMany! Вы спасли мою неделю, я не знаю, как сказать спасибо :) –

+0

добро пожаловать, рад, что я мог бы помочь;) – octavioccl