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

时间:2016-01-06 07:15:27

标签: c# asp.net-mvc asp.net-mvc-4 model asp.net-mvc-viewmodel

我是MVC的新手。在我的应用程序中,我试图根据不同的参数搜索数据。数据存储在数据库中,并使用Entity Framework访问db。因为我需要将来自多个模型的数据显示到一个视图中,所以我决定使用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;来自UserTypeMaster模型的用户模型和LicenseType的电子邮件。我不确定将两个模型中的哪些属性包含到ViewModel中,以便它只能呈现所需的数据。也是方法的返回类型,以便可以在控制器中访问它,然后可以传递给视图。

请帮忙。

1 个答案:

答案 0 :(得分:0)

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