Asp.net 使用存储库模式创建ViewModels的正确方法是什么

Asp.net 使用存储库模式创建ViewModels的正确方法是什么,asp.net,asp.net-mvc,model-view-controller,repository,Asp.net,Asp.net Mvc,Model View Controller,Repository,我正在学习使用ASP.NETMVC和存储库模式。 我有一个用户列表和一个角色列表。用户包含RoleId,角色包含RoleName和Id。我想返回一个UsersWithRoles列表,并将其放入具有用户名和RoleName的ViewModel中。正确的方法是什么。 我在想: 1) 从控制器(foreach)获取名称和角色列表并填充ViewModel 2) 在存储库中加入角色和名称,并将它们作为一个实体返回给控制器,我在控制器中填充ViewModel 3) 在存储库中加入角色和名称,并直接作为Vie

我正在学习使用ASP.NETMVC和存储库模式。 我有一个用户列表和一个角色列表。用户包含RoleId,角色包含RoleName和Id。我想返回一个UsersWithRoles列表,并将其放入具有用户名和RoleName的ViewModel中。正确的方法是什么。 我在想: 1) 从控制器(foreach)获取名称和角色列表并填充ViewModel 2) 在存储库中加入角色和名称,并将它们作为一个实体返回给控制器,我在控制器中填充ViewModel
3) 在存储库中加入角色和名称,并直接作为ViewModel返回

您可以通过使用LINQ获取用户记录来实现这一点,并且使用该用户信息,您可以再次使用LINQ获取角色记录。最后,您可以添加自定义模型,并将该模型发送到视图

在控制器中

查找特定记录并将公共字段(主数据)存储到局部变量

var Users = _Entity.UserInfoTable.Where(p => p.UserCode.Equals(UserID)).FirstOrDefault();
string strUserID = Users.UserID
strUserID保存用户ID

现在使用局部变量获取特定于该用户的角色数据

var UserRole = _Entity.UserRoleTable.Where(p => p.UserCode.Equals(strUserID)).FirstOrDefault()
最后一步:将UserRole数据添加到自定义/视图模型/Repo

CustomeModel cm = new CustomeModel();
cm.UserID  = UserRole.UserID;
cm.RoleID = UserRole.RoleID;
cm.RoleName = UserRole.RoleName;

@derloopkat我想列出所有用户及其角色
   var usersWithRoles = (from u in Users
                         join r in Roles on r.Id equals u.RoleId
                         select new UserWithRoles{
                                UserName = u.UserName,
                                RoleName = r.RoleName

                        }).ToList();