2014-09-27 39 views
8

我坚持试图让这个输出掌握其分配的角色的用户的列表中身份2

Id | Name | Role 
---------------------------- 
1 | John | Administrator 
---------------------------- 
2 | Mary | Manager 
---------------------------- 
3 | Sage | Editor 
---------------------------- 
4 | Hank | Manager 

我可以使它在LINQPad工作,但不知何故,我无法把它翻译到ASP.NET MVC。

from u in Users 
from ur in u.Roles 
join r in Roles on ur.RoleId equals r.Id 
select new { 
    Id = u.Id, 
    Name = u.Name, 
    Role = r.Name, 
} 

我如何LINQ在ASP.NET MVC 5身份?

为了清楚起见,我正在寻找用户和角色之间的JOIN查询。

+0

您是否想在控制台此输出还是让它在Razor视图索引列表? – Yoda 2014-09-27 19:30:37

+0

我想将其返回到控制器中的视图 – 2014-09-27 19:34:12

回答

9

如果使用的是ASP.NET身份2,你有一些代码添加到AccountContoller。添加一个ActionResult得到UserList。您也从OwinContext NEDD ApplicationDbContext实例,并得到它:

public class AccountController : Controller 
{ 
    private ApplicationUserManager _userManager; 
    private ApplicationSignInManager _signInManager; 

    public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager) 
    { 
     UserManager = userManager; 
     SignInManager = signInManager; 
    } 

    public ActionResult UserList() 
    { 
     var applicationDbContext = HttpContext.GetOwinContext().Get<ApplicationDbContext>(); 
     var users = from u in applicationDbContext.Users 
        from ur in u.Roles 
        join r in ApplicationDbContext.Roles on ur.RoleId equals r.Id 
        select new 
        { 
         u.Id, 
         Name = u.UserName, 
         Role = r.Name, 
        }; 

      // users is anonymous type, map it to a Model 
      return View(users); 
    } 
    . 
    . 
    . 
} 

更新 - 如果用户有多个角色:

from user in applicationDbContext.Users 
select new 
{ 
    user.Id, 
    user.UserName, 
    Roles = applicationDbContext.Roles.Where(r => user.Roles.Select(ur => ur.RoleId).Contains(r.Id)).Select(r => r.Name) 
} 
+2

这看起来不错,但如果用户有多个角色呢? – RoLYroLLs 2015-12-02 04:57:22

-4

如果您是ASP.NET-MVC的新手,请转到解决方案资源管理器,右键单击控制器文件夹,添加控制器,然后选择使用实体框架的读/写操作的控制器,选择型号ApplicationUser,确保创建视图被选中,然后确定。

你会得到比你要求的多得多,但你需要的部分将在Index方法和Index.csthml,但你会学到很多东西。

如果您不想使用那只是将return View(dbContext.Users.ToList())传递给View,但是接下来的问题可能是如何显示它,因此尝试第一个解决方案可能会更好。

你的索引页将在链接localhost:port/ApplicationUsers

+0

任何lucK? 3更多去 – Yoda 2014-09-27 20:01:46

+0

这个答案与我的问题没有关系,虽然=)我问如何做一个LINQ加入身份角色。 – 2014-09-27 20:04:18

+0

@FrankieYale在你的OP中没有任何地方你问这个问题。 – Yoda 2014-09-27 20:07:25