Mike
Mike

Reputation: 1580

Get a list of users and their roles

I'm using the membership provider asp.net mvc 4. I'd like to get a list of users and their roles without Roles.GetRolesForUser() for each user.

In my application, the business requirements state that a user will only ever be assigned one role.

What I'm currently doing:

    [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));
    }

Very inefficient. How do I fix this?

Thanks.

Upvotes: 5

Views: 1443

Answers (2)

Mike
Mike

Reputation: 1580

I just ended up using EF and linq to get the result.

    [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));
    }

Upvotes: 0

spaceman
spaceman

Reputation: 1648

In the past I've cheated somewhat when using the standard membership provider and have written a lot of complex queries directly against the tables in sql. What you're looking for is a simple join.

Upvotes: 1

Related Questions