我如何填充我的viewmodel's属性与它的集合
本文关键字:属性 集合 viewmodel 何填充 填充 我的 | 更新日期: 2023-09-27 18:13:38
这些是我的主类
public class Customer
{
public Customer()
{
Products = new HashSet<Product>();
}
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Product> Products { get; set; }
}
public class Product
{
public int Id { get; set; }
public int CustomerId { get; set; }
public string ProductName { get; set; }
public Customer Customer { get; set; }
}
这些是我的视图模型
public class ProductVM
{
public string ProductName { get; set; }
}
public class CustomerVM
{
public string Name { get; set; }
public ICollection<ProductVM> Products { get; set; }
}
如何填充CustomerVM
的属性?
我已经试过了:
var tmp = _db.Customers.Select(c => new CustomerVM
{
Name = c.Name,
Products = ????? // I don't know how to populate here
}
真正的新在asp.net mvc
和linq
仍在我的方式。
访问Products
属性并使用Select
关键字从ProductVM
创建一个集合,如下所示
var customerVm= _db.Customers
.Select(c => new CustomerVM
{
Name = c.Name,
Products = c.Products.
Select(s =>
new ProductVM {ProductName= s.ProductName}).ToList()
});
这应该可以完成工作:
var tmp = _db.Customers.Select(c =>
new CustomerVM
{
Name = c.Name,
Products = c.Products.Select(p => new ProductVM { ProductName = p.ProductName }).ToList()
}
)
如果Products
已经在Customer
中填充:
Products = c.Products.Select(p => new ProductVM() { ProductName = p.ProductName } ).ToList()
如果没有:
Products = _db.Products.Where(p => p.CustomerId = c.Id)
.Select(p => new ProductVM() { ProductName = p.ProductName } ).ToList()
如果您将客户类中的iccollection和产品类中的客户设置为虚拟,则它们将自动链接。
public class Customer
{
public Customer()
{
Products = new HashSet<Product>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int Id { get; set; }
public int CustomerId { get; set; }
public string ProductName { get; set; }
public virtual Customer Customer { get; set; }
}
如果您这样做,您可以用c.Products