2009-06-24 11 views
0

私はPageテーブルを持っており、PageIdを持つPagesRolesテーブルと、ASP.NetメンバシップロールテーブルとPagesテーブルにリンクするRoleIDを持っています。ASP.Netのロールテーブルへの外部キーの作成

私はどういうわけか、現在ログインしているユーザーの役割にリンクするページを返したいと思っています。

ユーザーは複数の役割を果たしている可能性があります。ページは複数のロールを持つことができます。

IQueryableの外部キープロパティを持つPageクラスがあります。 PageRolesはありASPNETロールテーブルへのIQueryable(のIQueryable)とのIQueryable

おかげ

EDIT:

が現在のものと一致することに割り当てられた役割を持っているすべてのページを取得するにはアダムの答えを使用してログインしたユーザーの役割私は追加された問題があります。 PageIDの外部キーとCategoryIDを持つMenuテーブルがあります。

カテゴリIDが4のすべてのメニュー項目を返したいと思います。ページIDを持つユーザーの場合、ユーザーが自分の役割に基づいてそのページを表示できるようにする必要があります。私はアダムの質問がそうするだろうと思う。したがって、私は必要なのは、UNIONで、PageIDがnullでCategoryIDが4で、CategoryIDが4のすべてのメニュー項目を返し、Page-> PageRole-> 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

厥のブリル、感謝を。私は本当にLINQのものとSubsonic用の正しい構文に苦しんでいますが、それは別の問題です。 私が言及しておかなければならない問題が1つあります。 PageID列を持つメニューテーブルがあります。すべてのメニュー項目がPageIDを持っているわけではありませんが、私はあなたの質問をする必要がありますが、私はpageidがヌルかあなたの質問であるメニューからすべてを選択できるように組み合わせたいと思います。私はここにその問題を概説している - それが助けてくれればhttp://stackoverflow.com/questions/1038309/reengineer-sql-into-subsonic-linqうまくいけば、あなたは私が何を意味するかを見ます。もう一度ありがとう – Jon

+0

問題はありません、私は他の質問を見ていきます。あなたがlinqでスピードアップをしたいのであれば、o'reilly pocket referenceのコピーを入手することをお勧めします。それは素晴らしい小さな本です。 –

+0

ありがとうございます。うまくいけば私は何をしようとしているのか理解しています。質問が尋ねられてからモデルを変更し、ロールの列を多対多ページロールテーブルに置き換えました。その本を手に入れることができるかもしれません。ちょうど私はC#の結合のようなものと混同していますが、あなたは亜音速クラスのforeginキープロパティを持っていますので、私はそれを使うと考えました。 – Jon

関連する問題