如何在 ASP.NET Core 的单一视图中显示来自两个上下文的数据
How to show data from two contexts in single view in ASP.NET Core
抱歉我的英语不好。
要显示每个顾问的用户列表,我需要先在 ASP.NET Core 5 的页面上显示名字、姓氏、phone 号码和字段。
为此,我需要能够合并 AspNetUsers
和 Students
表,以便我可以从中获取信息并将其保存在视图模型中,以便我可以在一页。
但问题是我无法合并这两个表。我什至在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);
抱歉我的英语不好。
要显示每个顾问的用户列表,我需要先在 ASP.NET Core 5 的页面上显示名字、姓氏、phone 号码和字段。
为此,我需要能够合并 AspNetUsers
和 Students
表,以便我可以从中获取信息并将其保存在视图模型中,以便我可以在一页。
但问题是我无法合并这两个表。我什至在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);