如何在 ASP.NET Core 的单一视图中显示来自两个上下文的数据

How to show data from two contexts in single view in ASP.NET Core

抱歉我的英语不好。

要显示每个顾问的用户列表,我需要先在 ASP.NET Core 5 的页面上显示名字、姓氏、phone 号码和字段。

为此,我需要能够合并 AspNetUsersStudents 表,以便我可以从中获取信息并将其保存在视图模型中,以便我可以在一页。

但问题是我无法合并这两个表。我什至在Linq中使用了Join方法,但是我得到了一个错误。

不用说,这两个表已经关联起来,唯一的问题是同时显示来自这两个上下文的信息 - 一个 IdentityDbContext 另一个是 PlanContext.

谢谢!

查看模型Adminshowusers

public class Adminshowusers 
{
     public string FirstName { get; set; }
     public string LastName{ get; set; }
     public string PhoneNumber{ get; set; }
     public string Field { get; set; }
}

而我的操作方法无效

public async Task<IActionResult> ConsultantIndex(string Msg,string id)
{
    var data = await _userManager.GetAllUsersWithRolesAsync();

    var users = (from u in data
                 join a in _context.Students 
                        on data.Select(x=>x.Id) equals a.ID
                 select new AdminAddUsers()
                            {
                                FirstName = u.FirstName,
                                LastName = u.LastName,
                                PhoneNumber = u.PhoneNumber,
                                Field = a.Field
                            });

    return View(users);
}

方法 GetAllUsersWithRolesAsync() 也是预先创建的,并显示所有用户及其角色的列表:

public async Task<List<UsersViewModel>> GetAllUsersWithRolesAsync()
{
    return await Users.Select(user => new UsersViewModel
        {
            Id = user.Id,
            Email = user.Email,
            UserName = user.UserName,
            PhoneNumber = user.PhoneNumber,
            FirstName = user.FirstName,
            LastName = user.LastName,
            BirthDate = user.BirthDate,
            IsActive = user.IsActive,
            LastVisitDateTime = user.LastVisitDateTime,
            Image = user.Image,
            RegisterDate = user.RegisterDate,
            Roles = user.Roles.Select(u => u.Role.Name),
        }).ToListAsync();
}

我会稍微更改一下代码,您不能将服务器中的代码与数据库中的代码合并。首先带上所有来自 db 的学生,然后加入另一个列表。

    var data = await _userManager.GetAllUsersWithRolesAsync();
    var students = await _context.Students.Select(i=> new {ID=i.ID, Field=i.Field}).ToListAsync();
    var users = (from u in data
              join a in students on u.Id equals a.ID
              select new AdminAddUsers()
               {
                  FirstName=u.FirstName,
                  LastName=u.LastName,
                  PhoneNumber = u.PhoneNumber,
                  Field =a.Field
             }).ToList();

        return View(users);