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中,以便它只能呈现所需的数据。还有方法的返回类型,以便可以在控制器中访问该方法,然后将其传递给视图。

MVC视图模型访问多个表中的数据

您需要创建一个新的类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类添加任意数量的字段。希望能有所帮助。