2009-06-24 7 views
0

У меня есть таблица Pages, у меня есть таблица PagesRoles с pageId, RoleID, которая ссылается на таблицу ролей членства ASP.Net и таблицу Pages.Создать внешний ключ к таблице ролей ASP.Net

Я хочу как-то вернуть страницу, которая ссылается на зарегистрированные в настоящее время роли пользователя.

Пользователь может быть более чем в одной роли. На странице может быть более одной роли против нее.

У меня есть класс страницы, который имеет свойство внешнего ключа IQueryable. PageRoles имеет IQueryable к записи ASPNET ролей таблицы (IQueryable) и IQueryable

Благодарности

EDIT:

Используя ответ Адама, чтобы получить все страницы, которые имеют роль, отведенную ему, который соответствует одному из текущего вошедшие в роли пользователя У меня есть дополнительная проблема. У меня есть таблица меню, которая имеет внешний ключ PageID и идентификатор категории.

Я хотел бы вернуть все элементы меню с идентификатором категории 4. Для тех, у кого есть идентификатор страницы, мне нужно убедиться, что пользователю разрешено видеть эту страницу на основе его роли. Я думаю, что запрос Адама сделает это. Поэтому я думаю, что мне нужен UNION, возвращать все пункты меню, где PageID равно null, а CategoryID - 4 и возвращать все пункты меню, где CategoryID равен 4, и присоединиться к странице-> PageRole-> ASPNetRole, где текущие роли пользователей находятся в том, что ASPNetRole Результаты.

ответ

0

Если вы используете дозвуковых 3 запроса, как должно работать:

var pagesForUser = from pages in Pages.All() 
    join pagesRoles in PagesRoles.All() on pages.Id equals pagesRoles.PageID 
    join roles in Roles.All() on pagesRoles.RoleId equals roles.Id 
    where User.GetRoles().Contains(roles.Name) 
    select pages; 
+0

Thats Брилл, спасибо. Я действительно борюсь с материалом LINQ и правильным синтаксисом для использования в Subsonic, но это другая проблема. У меня есть одна проблема, о которой я должен был упомянуть. У меня есть таблица меню, которая имеет столбец PageID. Не все пункты меню имеют PageID, но для тех, которые мне нужны для выполнения вашего запроса, но я хотел бы объединить его, чтобы я мог выбрать все из меню, где pageid - null или ваш запрос. Я рассказал об этом здесь - http://stackoverflow.com/questions/1038309/reengineer-sql-into-subsonic-linq, если это поможет. Надеюсь, вы поймете, что я имею в виду. Еще раз спасибо – Jon

+0

Нет проблем, я посмотрю на другой вопрос. Если вы хотите встать на скорость по linq, я бы предложил получить копию справочной информации o'reilly, это отличная маленькая книга. –

+0

Спасибо. Надеюсь, вы понимаете, что я пытаюсь сделать. Я изменил свою модель, поскольку задан вопрос и заменил столбец «Роли» таблицей «Множество-много страниц». Могла бы получить эту книгу, ее просто то, что я запутался в том, чтобы делать что-то вроде объединений на C#, но у вас есть свойство foregin key в дозвуковом классе, поэтому я думал, что должен использовать это. – Jon

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