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

C# : MVC Viewmodel to access data from multiple tables

我是 MVC 新手。在我的应用程序中,我试图根据不同的参数搜索数据。数据存储在数据库中,我正在使用 Entity Framework 访问数据库。由于我需要将来自多个模型的数据显示到一个视图中,因此我决定使用 ViewModel 将两者 class 绑定在一起并显示数据。 这是我的代码 型号

[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;
    }
    }

我想要方法 return 来自用户模型的名字、姓氏和电子邮件以及来自 LicenseTypeMaster 模型的 LicenseType。我不确定要将两个模型的哪些属性包含到 ViewModel 中,以便它只能呈现所需的数据。还有方法的 return 类型,以便它可以在控制器中访问,然后可以传递给视图。

请帮忙。

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