Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:访问多个表中数据的MVC Viewmodel_C#_Asp.net Mvc_Asp.net Mvc 4_Model_Asp.net Mvc Viewmodel - Fatal编程技术网

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

C#:访问多个表中数据的MVC Viewmodel,c#,asp.net-mvc,asp.net-mvc-4,model,asp.net-mvc-viewmodel,C#,Asp.net Mvc,Asp.net Mvc 4,Model,Asp.net Mvc Viewmodel,我是MVC新手。在我的应用程序中,我尝试根据不同的参数搜索数据。数据存储在数据库中,am使用实体框架访问数据库。由于需要将多个模型中的数据显示到一个视图中,我决定使用ViewModel将这两个类绑定在一起并显示数据。 这是我的密码 型号 [Table("User")] public partial class User { [Key] public int UserId { get; set; } [StringLength(50)] public string

我是MVC新手。在我的应用程序中,我尝试根据不同的参数搜索数据。数据存储在数据库中,am使用实体框架访问数据库。由于需要将多个模型中的数据显示到一个视图中,我决定使用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;
    }
    }
公共类用户许可证持有人
{
VSLicenseDb=新的VSLicenseDb();
公共IEnumerable GetUserDetail(字符串searchBy、字符串searchValue)
{
List usr=新列表();
公共列表usr{get;set;};
var query=(来自数据库中的u.Users)
在db.UserLicenseTypes中加入ut
在u.UserId上等于ut.UserId
在db.toolsicensetypes中连接tl
在ut上,ToolLicenseTypeId等于tl.ToolLicenseTypeId
在db.LicenseTypeMasters中加入tm
在tl.LicenseTypeId上等于tm.LicenseTypeId
其中u.FirstName==searchBy
选择新的
{
FirstName=u.FirstName,
LastName=u.LastName,
电子邮件=美国电子邮件,
LicenseAllocated.=tm.LicenseTypes
}).ToList();
返回查询;
}
}
我希望该方法从用户模型返回FirstName、LastName和Email,从LicenseTypeMaster模型返回LicenseType。我不确定要从两个模型中包括哪些属性到ViewModel中,以便它只能渲染所需的数据。方法的返回类型,以便可以在控制器中访问该方法,然后将其传递给视图


请提供帮助。

您需要创建一个新类,比如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;
}
public IEnumerable GetUserDetail(字符串searchBy、字符串searchValue)
{
List usr=新列表();
公共列表usr{get;set;};
var query=(来自数据库中的u.Users)
在db.UserLicenseTypes中加入ut
在u.UserId上等于ut.UserId
在db.toolsicensetypes中连接tl
在ut上,ToolLicenseTypeId等于tl.ToolLicenseTypeId
在db.LicenseTypeMasters中加入tm
在tl.LicenseTypeId上等于tm.LicenseTypeId
其中u.FirstName==searchBy
选择newuserpoco
{
FirstName=u.FirstName,
LastName=u.LastName,
电子邮件=美国电子邮件,
LicenseAllocated.=tm.LicenseTypes
}).ToList();
返回查询;
}
这就是我应该做的。您可以向poco类添加任意数量的字段。
希望有帮助

您需要创建一个新类,比如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;
}
public IEnumerable GetUserDetail(字符串searchBy、字符串searchValue)
{
List usr=新列表();
公共列表usr{get;set;};
var query=(来自数据库中的u.Users)
在db.UserLicenseTypes中加入ut
在u.UserId上等于ut.UserId
在db.toolsicensetypes中连接tl
在ut上,ToolLicenseTypeId等于tl.ToolLicenseTypeId
在db.LicenseTypeMasters中加入tm
在tl.LicenseTypeId上等于tm.LicenseTypeId
其中u.FirstName==searchBy
选择newuserpoco
{
FirstName=u.FirstName,
LastName=u.LastName,
电子邮件=美国电子邮件,
LicenseAllocated.=tm.LicenseTypes
}).ToList();
返回查询;
}
这就是我应该做的。您可以向poco类添加任意数量的字段。
希望有帮助

我认为应该从视图模型中删除逻辑,并将GetUserDetail放在其他类(业务层)中。另一个提示是,当您将列表放入视图模型时,您将数据层绑定到视图,这不好。@pooriataghizadeh我应该将其放入控制器吗?我想通过在视图模型类中实例化来在控制器中调用它。你可以把你的函数放在你想要的任何地方,你也可以通过实例化来调用它,但更好的方法是把你的逻辑放在另一层。并将逻辑与数据模型和视图(表示层)分开。建议接受!我认为应该从视图模型中删除逻辑,并将GetUserDetail放在其他类(业务层)中。另一个提示是,当您将列表放入视图模型时,您将数据层绑定到视图,这不好。@pooriataghizadeh我应该将其放入控制器吗?我想通过在视图模型类中实例化来在控制器中调用它。你可以把你的函数放在你想要的任何地方,你也可以通过实例化来调用它,但更好的方法是把你的逻辑放在另一层。并将逻辑与数据模型和视图(表示层)分开。建议接受!谢谢你的解决方案。对我来说很好。谢谢你的解决方案。对我来说效果很好。