我如何填充我的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 mvclinq仍在我的方式。

我如何填充我的viewmodel's属性与它的集合

访问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

填充点。