0

私はそれらの間のm対nの関係である2つのテーブルを持っています。ロール、モジュール、ModulsInRoles。現在のユーザー ロールを取得します。Iそして、これらの役割のモジュールを取得したいと考えています。なんか書いてみた。しかし、私は成功することはできません。

string[] roller = System.Web.Security.Roles.GetRolesForUser();

IEnumerable<TblModuller> moduller = null;
IEnumerable<TblModulsInRoles> moduls_in_roles = null;

foreach (var rol in roller)
{
     moduls_in_roles = entity.TblModulsInRoles.Where(x => x.Roles.RoleName == rol);
     foreach(var modul in moduls_in_roles)
     {
         //I dont know What should I write or this code is correct.
     }
}

例えば; 私のデータは次のようなものです:

Admin  Modul1
Admin  Modul2
User   Modul2
User   Modul3

そして、私はこれを取得したい:

Modul1
Modul2
Modul3

ロジックは何ですか?このトピックに関するコード例またはチュートリアルはありますか。

ありがとう。

4

2 に答える 2

1

これを試して

var modullerList = new List< TblModuller>();

foreach (var rol in roller)
{
     moduls_in_roles = entity.TblModulsInRoles.Where(x => x.Roles.RoleName == rol);
     foreach(var modul in moduls_in_roles)
     {
        if(!modullerList .Contains(modul))
            modullerList .Add(modul);
     }
}
于 2012-07-18T13:23:56.837 に答える
1

「別の方法はありますか?」という質問に答えるために。: 使用できますSelectMany。あなたが扱っているものの構造を完全に理解しているかどうかはわかりませんが、推測しました. うまくいけば、それは正しいです。

string[] roles = System.Web.Security.Roles.GetRolesForUser();

var modules = roles
    .SelectMany(r =>
        entity.TblModulsInRoles.Where(m => m.Roles.RoleName == r)
    )
    .Distinct();

から返される各モジュールTblModulesInRolesが、各ロール マッピングで参照される同じオブジェクトであると仮定すると、これは機能するはずです。それが同じオブジェクトでない場合、モジュール エンティティはおそらく標準的な方法のいずれかで比較する必要があります。

これをローカルでテストするために使用したコードを次に示します。明らかに、完全に同じというわけではありませんがSelectMany、少なくとも .

public class Module
{
    public Module(string name)
    {
        Name = name;
    }

    public string Name { get; private set; }
}

Module one = new Module("one");
Module two = new Module("two");
Module three = new Module("three");

Dictionary<string, List<Module>> dict = new Dictionary<string, List<Module>>
{
    {"cow", new List<Module> { one, two }},
    {"chicken", new List<Module> { one }},
    {"pig", new List<Module> { two }}
};

string[] roles = new string[] { "cow", "chicken", "pig" };

var result = roles.SelectMany(r => dict[r]).Distinct();

Console.WriteLine(result);

// { one, two }
于 2012-07-18T14:36:07.327 に答える