代码之家  ›  专栏  ›  技术社区  ›  arpymastro

C#:MVC Viewmodel,用于访问多个表中的数据

  •  1
  • arpymastro  · 技术社区  · 9 年前

    我是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; }
    }
    

    视图模型

    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和amp;来自用户模型的电子邮件和来自LicenseTypeMaster模型的LicenseType。我不确定要将两个模型中的哪些属性包含到ViewModel中,以便它只能渲染所需的数据。还有方法的返回类型,以便可以在控制器中访问它,然后可以传递给视图。

    请帮忙。

    1 回复  |  直到 9 年前
        1
  •  0
  •   Parminder    9 年前

    您需要创建一个新的类SayUserPoco,其中包含要提取的所有字段

     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类中添加任意多的字段。 希望有帮助。