5

メンバーシップ プロバイダー asp.net mvc 4 を使用しています。ユーザーとそのロールのリストをユーザーRoles.GetRolesForUser()ごとに取得したくありません。

私のアプリケーションでは、ビジネス要件により、ユーザーには 1 つのロールしか割り当てられないことが規定されています。

私が現在していること:

    [GridAction]
    public ActionResult _GetUsers()
    {
        var users = Membership.GetAllUsers().Cast<MembershipUser>().Select(n => new AdminAccountEditModel
        {
            Role = Roles.GetRolesForUser(n.UserName).FirstOrDefault(),
            IsApproved = n.IsApproved,
            Email = n.Email,
            UserName = n.UserName
        }).ToList();

        return View(new GridModel(users));
    }

非常に非効率的です。これを修正するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

1

過去に、標準のメンバーシップ プロバイダーを使用する際に多少ごまかし、SQL のテーブルに対して直接多くの複雑なクエリを作成しました。あなたが探しているのは、単純な結合です。

于 2013-01-09T09:34:01.280 に答える
0

結果を得るためにEFとlinqを使用することになりました。

    [GridAction]
    public ActionResult _GetUsers()
    {

        var users = from user in xcsnEntities.Users
                    select new
                    {
                        Role = user.Roles.FirstOrDefault().RoleName,
                        IsApproved = user.Membership.IsApproved,
                        Email = user.Membership.Email,
                        UserName = user.UserName
                    };

        return View(new GridModel(users));
    }
于 2013-01-10T00:10:03.990 に答える