如何连接具有多对多关系的表

时间:2018-09-11 13:11:46

标签: c# entity-framework-core

我想要做的是联接表以填充如下所示的viewModel:

public class UserViewModel
{
    public String Id { get; set; }
    public String UserName { get; set; }
    public String Email { get; set; }
    public String Role { get; set; }
}

我的查询atm看起来像这样,但是显然不能正常工作,但是可能有助于描述问题。

public IActionResult AddAdmin()
{
    var allUsers = (from u in _dbContext.Users
                    join r in _dbContext.UserRoles on u.Id equals r.UserId
                    join i in _dbContext.Roles on r.RoleId equals i.Id
                    select new UserViewModel
                 {
                     UserName = u.UserName,
                     Email = u.Email,
                     Id = u.Id,
                     Role = i.Name
                 }).ToList();

    return View(allUsers);
}

如您所见,我很难找到的是将角色应用于viewModel,因为它们通过manyTomany表彼此连接

问题:查询不起作用,并且没有给出任何结果 在将角色加入viewModel之前,我已经将数据输入到视图中,现在什么也没得到。

我的问题:执行此操作的正确方法是什么?轻松浏览数据

2 个答案:

答案 0 :(得分:0)

当我这样做时,它起作用了...

public IActionResult AddAdmin()
{
    var allUsers = (from u in _dbContext.Users
                    select new UserViewModel
                 {
                     UserName = u.UserName,
                     Email = u.Email,
                     Id = u.Id

                 }).ToList();

    foreach (var item in allUsers)
    {
        var roleId = _dbContext.UserRoles.Where(x => x.UserId == item.Id).FirstOrDefault();
        item.Role = _dbContext.Roles.Where(x => x.Id == roleId.RoleId).FirstOrDefault().Name;
    }
    return View(allUsers);
}

我知道它看起来像s *** ..

答案 1 :(得分:-1)

您需要第三个实体将两者绑定在一起。用数据库术语来说,它称为联结表。