2013-12-18 4 views
0

Этот вопрос может быть немного примитивным, но у меня возникли проблемы с пониманием правильной логики запроса.LINQ Query with Hashsets from Entity Data Model

У меня есть приложение MVC 5, и я пытаюсь создать модель данных сущности ADO.NET для создания моих объектов из базы данных. Я также использую новое членство в Identity и позволяю ASP.NET создавать таблицы членства для меня.

Вот мой простой SQL Query

SELECT p.* FROM [User] u 
    INNER JOIN UserRole ur ON ur.UserId = u.UserId 
    INNER JOIN [Role] r ON r.RoleID = ur.RoleId 
    INNER JOIN RolePermission rp ON rp.RoleId = r.RoleID 
    INNER JOIN Permission p ON p.PermissionId = rp.PermissionId 
WHERE u.UserName = 'admin' 

который возвращает мне все разрешения для пользователя, основываясь на том, что роли пользователя в; и отлично работает.

Когда модель данных сущности создает модель, она удаляет таблицы UserRole и RolePermission (таблицы с составным первичным ключом) и вместо этого дает мне HashSet в каждом объекте.

так Пользователь выглядит следующим образом:

public User() 
{ 
    this.Role = new HashSet<Role>(); 
} 

и роли:

public Role() 
{ 
    this.User = new HashSet<User>(); 
    this.Permission = new HashSet<Permission>(); 
} 

и то же самое для разрешения. Мне интересно, какой лучший способ запустить тот же запрос в LINQ? Благодарю за любой совет.

ответ

2

Это должно быть правильно (с помощью моего любимого синтаксиса):

var permissions = Context.Users 
    .Where(u => u.UserName == "admin") 
    .SelectMany(u => u.Role) 
    .SelectMany(r => r.Permission) 
+0

да вот это ThankYou очень много. – Jonesopolis

Смежные вопросы