C#:访问多个表中数据的MVC Viewmodel
我是MVC新手。在我的应用程序中,我尝试根据不同的参数搜索数据。数据存储在数据库中,am使用实体框架访问数据库。由于需要将多个模型中的数据显示到一个视图中,我决定使用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
[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我应该将其放入控制器吗?我想通过在视图模型类中实例化来在控制器中调用它。你可以把你的函数放在你想要的任何地方,你也可以通过实例化来调用它,但更好的方法是把你的逻辑放在另一层。并将逻辑与数据模型和视图(表示层)分开。建议接受!谢谢你的解决方案。对我来说很好。谢谢你的解决方案。对我来说效果很好。