MVC视图模型访问多个表中的数据
本文关键字:数据 视图 模型 访问 MVC | 更新日期: 2023-09-27 18:29:04
我是MVC的新手。在我的应用程序中,我试图根据不同的参数搜索数据。数据存储在数据库中,我使用实体框架访问数据库。由于我需要将多个模型中的数据显示到一个视图中,所以我决定使用ViewModel将这两个类绑定在一起并显示数据。
这是我的代码:
型号
[Table("User")]
public partial class User
{
[Key]
public int UserId { get; set; }
[StringLength(50)]
public string FirstName { get; set; }
[StringLength(50)]
public string LastName { get; set; }
[StringLength(50)]
public string Email { get; set; }
public virtual LicenseTypeMaster LicenseTypeMaster { get; set; }
}
[Table("tblLicenseTypeMaster")]
public partial class LicenseTypeMaster
{
Key]
public int LicenseTypeId { get; set; }
[StringLength(100)]
public string LicenseTypes { get; set; }
public int? LicenseCount { get; set; }
}
ViewModel
public class UserLicenseTWRBinder
{
VSLicenseDb db = new VSLicenseDb();
public IEnumerable<User> GetUserDetail(string searchBy, string searchValue)
{
List<User> usr = new List<User>();
public List<User> usr { get; set; };
var query = (from u in db.Users
join ut in db.UserLicenseTypes
on u.UserId equals ut.UserId
join tl in db.ToolsLicenseTypes
on ut.ToolLicenseTypeId equals tl.ToolLicenseTypeId
join tm in db.LicenseTypeMasters
on tl.LicenseTypeId equals tm.LicenseTypeId
where u.FirstName == searchBy
select new
{
FirstName = u.FirstName,
LastName = u.LastName,
Email = u.Email,
LicenseAllocated. = tm.LicenseTypes
}).ToList();
return query;
}
}
我希望该方法返回FirstName,LastName&来自User模型的电子邮件和来自LicenseTypeMaster模型的LicenseType。我不确定将两个模型中的哪些属性包含在ViewModel中,以便它只能呈现所需的数据。还有方法的返回类型,以便可以在控制器中访问该方法,然后将其传递给视图。
您需要创建一个新的类Say UserPoco,其中包含提取的所有字段
public class UserPoco
{
public string FirstName {get;set}
public string LastName {get;set}
public string Email{get;set}
public string LicenseAllocated {get;set}
}
这个方法应该像这个
public IEnumerable<UserPoco> GetUserDetail(string searchBy, string searchValue)
{
List<User> usr = new List<User>();
public List<User> usr { get; set; };
var query = (from u in db.Users
join ut in db.UserLicenseTypes
on u.UserId equals ut.UserId
join tl in db.ToolsLicenseTypes
on ut.ToolLicenseTypeId equals tl.ToolLicenseTypeId
join tm in db.LicenseTypeMasters
on tl.LicenseTypeId equals tm.LicenseTypeId
where u.FirstName == searchBy
select new UserPoco
{
FirstName = u.FirstName,
LastName = u.LastName,
Email = u.Email,
LicenseAllocated. = tm.LicenseTypes
}).ToList();
return query;
}
我会这样做的。您可以向poco类添加任意数量的字段。希望能有所帮助。